Mercurial > pub > ImplabNet
comparison Implab/Promise.cs @ 26:f0bf98e4d22c
refactoring
author | cin |
---|---|
date | Fri, 21 Feb 2014 03:15:28 +0400 |
parents | 9bf5b23650c9 |
children | a236cd1f0477 |
comparison
equal
deleted
inserted
replaced
25:9bf5b23650c9 | 26:f0bf98e4d22c |
---|---|
189 /// </summary> | 189 /// </summary> |
190 /// <param name="success">The handler of the successfully completed operation. | 190 /// <param name="success">The handler of the successfully completed operation. |
191 /// This handler will recieve an operation result as a parameter.</param> | 191 /// This handler will recieve an operation result as a parameter.</param> |
192 /// <param name="error">Handles an exception that may occur during the operation.</param> | 192 /// <param name="error">Handles an exception that may occur during the operation.</param> |
193 /// <returns>The new promise chained to this one.</returns> | 193 /// <returns>The new promise chained to this one.</returns> |
194 public Promise<T> Then(ResultHandler<T> success, ErrorHandler error) { | 194 public IPromise<T> Then(ResultHandler<T> success, ErrorHandler error) { |
195 if (success == null && error == null) | 195 if (success == null && error == null) |
196 return this; | 196 return this; |
197 | 197 |
198 var medium = new Promise<T>(this, true); | 198 var medium = new Promise<T>(this, true); |
199 | 199 |
223 AddHandler(resultHandler, errorHandler, medium.InternalCancel); | 223 AddHandler(resultHandler, errorHandler, medium.InternalCancel); |
224 | 224 |
225 return medium; | 225 return medium; |
226 } | 226 } |
227 | 227 |
228 public IPromiseBase Then(Action success,ErrorHandler error) | |
229 { | |
230 return Then(x => success(), error); | |
231 } | |
232 | |
233 public IPromiseBase Then(Action success) | |
234 { | |
235 return Then(success); | |
236 } | |
237 | |
228 /// <summary> | 238 /// <summary> |
229 /// Adds new handlers to this promise. | 239 /// Adds new handlers to this promise. |
230 /// </summary> | 240 /// </summary> |
231 /// <param name="success">The handler of the successfully completed operation. | 241 /// <param name="success">The handler of the successfully completed operation. |
232 /// This handler will recieve an operation result as a parameter.</param> | 242 /// This handler will recieve an operation result as a parameter.</param> |
233 /// <param name="error">Handles an exception that may occur during the operation and returns the value which will be used as the result of the operation.</param> | 243 /// <param name="error">Handles an exception that may occur during the operation and returns the value which will be used as the result of the operation.</param> |
234 /// <returns>The new promise chained to this one.</returns> | 244 /// <returns>The new promise chained to this one.</returns> |
235 public Promise<T> Then(ResultHandler<T> success, ErrorHandler<T> error) { | 245 public IPromise<T> Then(ResultHandler<T> success, ErrorHandler<T> error) { |
236 if (success == null && error == null) | 246 if (success == null && error == null) |
237 return this; | 247 return this; |
238 | 248 |
239 var medium = new Promise<T>(this, true); | 249 var medium = new Promise<T>(this, true); |
240 | 250 |
264 | 274 |
265 return medium; | 275 return medium; |
266 } | 276 } |
267 | 277 |
268 | 278 |
269 public Promise<T> Then(ResultHandler<T> success) { | 279 public IPromise<T> Then(ResultHandler<T> success) { |
270 if (success == null) | 280 if (success == null) |
271 return this; | 281 return this; |
272 | 282 |
273 var medium = new Promise<T>(this, true); | 283 var medium = new Promise<T>(this, true); |
274 | 284 |
285 AddHandler(resultHandler, medium.Reject, medium.InternalCancel); | 295 AddHandler(resultHandler, medium.Reject, medium.InternalCancel); |
286 | 296 |
287 return medium; | 297 return medium; |
288 } | 298 } |
289 | 299 |
290 public Promise<T> Error(ErrorHandler error) { | 300 public IPromise<T> Error(ErrorHandler error) { |
291 return Then(null, error); | 301 return Then((ResultHandler<T>)null, error); |
292 } | 302 } |
293 | 303 |
294 /// <summary> | 304 /// <summary> |
295 /// Handles error and allows to keep the promise. | 305 /// Handles error and allows to keep the promise. |
296 /// </summary> | 306 /// </summary> |
297 /// <remarks> | 307 /// <remarks> |
298 /// If the specified handler throws an exception, this exception will be used to reject the promise. | 308 /// If the specified handler throws an exception, this exception will be used to reject the promise. |
299 /// </remarks> | 309 /// </remarks> |
300 /// <param name="handler">The error handler which returns the result of the promise.</param> | 310 /// <param name="handler">The error handler which returns the result of the promise.</param> |
301 /// <returns>New promise.</returns> | 311 /// <returns>New promise.</returns> |
302 public Promise<T> Error(ErrorHandler<T> handler) { | 312 public IPromise<T> Error(ErrorHandler<T> handler) { |
303 if (handler == null) | 313 if (handler == null) |
304 return this; | 314 return this; |
305 | 315 |
306 var medium = new Promise<T>(this, true); | 316 var medium = new Promise<T>(this, true); |
307 | 317 |
318 ); | 328 ); |
319 | 329 |
320 return medium; | 330 return medium; |
321 } | 331 } |
322 | 332 |
323 public Promise<T> Anyway(Action handler) { | 333 public IPromise<T> Anyway(Action handler) { |
324 if (handler == null) | 334 if (handler == null) |
325 return this; | 335 return this; |
326 | 336 |
327 var medium = new Promise<T>(); | 337 var medium = new Promise<T>(); |
328 | 338 |
356 /// <typeparam name="TNew">Новый тип результата.</typeparam> | 366 /// <typeparam name="TNew">Новый тип результата.</typeparam> |
357 /// <param name="mapper">Преобразование результата к новому типу.</param> | 367 /// <param name="mapper">Преобразование результата к новому типу.</param> |
358 /// <param name="error">Обработчик ошибки. Данный обработчик получит | 368 /// <param name="error">Обработчик ошибки. Данный обработчик получит |
359 /// исключение возникшее при выполнении операции.</param> | 369 /// исключение возникшее при выполнении операции.</param> |
360 /// <returns>Новое обещание, которое будет выполнено при выполнении исходного обещания.</returns> | 370 /// <returns>Новое обещание, которое будет выполнено при выполнении исходного обещания.</returns> |
361 public Promise<TNew> Map<TNew>(ResultMapper<T, TNew> mapper, ErrorHandler error) { | 371 public IPromise<TNew> Map<TNew>(ResultMapper<T, TNew> mapper, ErrorHandler error) { |
362 if (mapper == null) | 372 if (mapper == null) |
363 throw new ArgumentNullException("mapper"); | 373 throw new ArgumentNullException("mapper"); |
364 | 374 |
365 // создаем прицепленное обещание | 375 // создаем прицепленное обещание |
366 var chained = new Promise<TNew>(); | 376 var chained = new Promise<TNew>(); |
383 ); | 393 ); |
384 | 394 |
385 return chained; | 395 return chained; |
386 } | 396 } |
387 | 397 |
388 public Promise<TNew> Map<TNew>(ResultMapper<T, TNew> mapper) { | 398 public IPromise<TNew> Map<TNew>(ResultMapper<T, TNew> mapper) { |
389 return Map(mapper, null); | 399 return Map(mapper, null); |
390 } | 400 } |
391 | 401 |
392 /// <summary> | 402 /// <summary> |
393 /// Сцепляет несколько аснхронных операций. Указанная асинхронная операция будет вызвана после | 403 /// Сцепляет несколько аснхронных операций. Указанная асинхронная операция будет вызвана после |
397 /// <typeparam name="TNew">Тип результата указанной асинхронной операции.</typeparam> | 407 /// <typeparam name="TNew">Тип результата указанной асинхронной операции.</typeparam> |
398 /// <param name="chained">Асинхронная операция, которая должна будет начаться после выполнения текущей.</param> | 408 /// <param name="chained">Асинхронная операция, которая должна будет начаться после выполнения текущей.</param> |
399 /// <param name="error">Обработчик ошибки. Данный обработчик получит | 409 /// <param name="error">Обработчик ошибки. Данный обработчик получит |
400 /// исключение возникшее при выполнении текуещй операции.</param> | 410 /// исключение возникшее при выполнении текуещй операции.</param> |
401 /// <returns>Новое обещание, которое будет выполнено по окончанию указанной аснхронной операции.</returns> | 411 /// <returns>Новое обещание, которое будет выполнено по окончанию указанной аснхронной операции.</returns> |
402 public Promise<TNew> Chain<TNew>(ChainedOperation<T, TNew> chained, ErrorHandler error) { | 412 public IPromise<TNew> Chain<TNew>(ChainedOperation<T, TNew> chained, ErrorHandler error) { |
403 | 413 |
404 // проблема в том, что на момент связывания еще не начата асинхронная операция, поэтому нужно | 414 // проблема в том, что на момент связывания еще не начата асинхронная операция, поэтому нужно |
405 // создать посредника, к которому будут подвызяваться следующие обработчики. | 415 // создать посредника, к которому будут подвызяваться следующие обработчики. |
406 // когда будет выполнена реальная асинхронная операция, она обратиться к посреднику, чтобы | 416 // когда будет выполнена реальная асинхронная операция, она обратиться к посреднику, чтобы |
407 // передать через него результаты работы. | 417 // передать через него результаты работы. |
435 ); | 445 ); |
436 | 446 |
437 return medium; | 447 return medium; |
438 } | 448 } |
439 | 449 |
440 public Promise<TNew> Chain<TNew>(ChainedOperation<T, TNew> chained) { | 450 public IPromise<TNew> Chain<TNew>(ChainedOperation<T, TNew> chained) { |
441 return Chain(chained, null); | 451 return Chain(chained, null); |
442 } | 452 } |
443 | 453 |
444 public Promise<T> Cancelled(Action handler) { | 454 public IPromise<T> Cancelled(Action handler) { |
445 AddHandler(null, null, handler); | 455 AddHandler(null, null, handler); |
446 return this; | 456 return this; |
447 } | 457 } |
448 | 458 |
449 /// <summary> | 459 /// <summary> |
450 /// Adds the specified handler for all cases (success, error, cancel) | 460 /// Adds the specified handler for all cases (success, error, cancel) |
451 /// </summary> | 461 /// </summary> |
452 /// <param name="handler">The handler that will be called anyway</param> | 462 /// <param name="handler">The handler that will be called anyway</param> |
453 /// <returns>self</returns> | 463 /// <returns>self</returns> |
454 public Promise<T> Finally(Action handler) { | 464 public IPromise<T> Finally(Action handler) { |
455 if (handler == null) | 465 if (handler == null) |
456 throw new ArgumentNullException("handler"); | 466 throw new ArgumentNullException("handler"); |
457 AddHandler( | 467 AddHandler( |
458 x => handler(), | 468 x => handler(), |
459 e => handler(), | 469 e => handler(), |