comparison Implab/PromiseFuncReaction`1.cs @ 249:d82909310094 v3

Implab.Test moved to xunit Complete set of PromiseHelpers (Then, Catch, Finally) Removed obsolete types ICancellable, ICancellationToken
author cin
date Wed, 31 Jan 2018 11:28:38 +0300
parents 5cb4826c2c2a
children
comparison
equal deleted inserted replaced
248:5cb4826c2c2a 249:d82909310094
1 using System; 1 using System;
2 using System.Diagnostics; 2 using System.Diagnostics;
3 3
4 namespace Implab { 4 namespace Implab {
5 class PromiseFuncReaction<TRet> : PromiseReaction { 5 class PromiseFuncReaction<TRet> : IResolvable {
6 readonly Deferred<TRet> m_next; 6 readonly Deferred<TRet> m_next;
7
8 readonly IDispatcher m_dispatcher;
9
10 readonly Action<Deferred<TRet>> m_fulfilled;
11
12 readonly Action<Exception, Deferred<TRet>> m_rejected;
7 13
8 public IPromise<TRet> Promise { 14 public IPromise<TRet> Promise {
9 get { return m_next.Promise; } 15 get { return m_next.Promise; }
10 } 16 }
11 17
12 public PromiseFuncReaction(Func<TRet> fulfilled, Func<Exception, TRet> rejected, IDispatcher dispatcher) : base(dispatcher) { 18 public PromiseFuncReaction(Action<Deferred<TRet>> fulfilled, Action<Exception, Deferred<TRet>> rejected, Deferred<TRet> next, IDispatcher dispatcher) {
13 m_next = new Deferred<TRet>(dispatcher); 19 m_next = next;
14 if (fulfilled != null) 20 m_fulfilled = fulfilled;
15 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); 21 m_rejected = rejected;
16 22 m_dispatcher = dispatcher;
17 if (rejected != null)
18 RejectHandler = PromiseHandler.Create(rejected, m_next);
19 } 23 }
20 24
21 public PromiseFuncReaction(Func<IPromise<TRet>> fulfilled, Func<Exception, IPromise<TRet>> rejected, IDispatcher dispatcher) : base(dispatcher) { 25 public void Resolve() {
22 m_next = new Deferred<TRet>(dispatcher); 26 if (m_fulfilled != null) {
23 if (fulfilled != null) 27 if (m_dispatcher != null)
24 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); 28 m_dispatcher.Enqueue(ResolveImpl);
25 29 else
26 if (rejected != null) 30 ResolveImpl();
27 RejectHandler = PromiseHandler.Create(rejected, m_next); 31 } else {
32 m_next.Resolve(default(TRet));
33 }
28 } 34 }
29 35
30 public PromiseFuncReaction(Func<TRet> fulfilled, Func<Exception, IPromise<TRet>> rejected, IDispatcher dispatcher) : base(dispatcher) { 36 void ResolveImpl () {
31 m_next = new Deferred<TRet>(dispatcher); 37 m_fulfilled(m_next);
32 if (fulfilled != null)
33 FulfilHandler = PromiseHandler.Create(fulfilled, m_next);
34
35 if (rejected != null)
36 RejectHandler = PromiseHandler.Create(rejected, m_next);
37 } 38 }
38 39
39 public PromiseFuncReaction(Func<IPromise<TRet>> fulfilled, Func<Exception, TRet> rejected, IDispatcher dispatcher) : base(dispatcher) { 40 public void Reject(Exception error) {
40 m_next = new Deferred<TRet>(dispatcher); 41 if (m_fulfilled != null) {
41 if (fulfilled != null) 42 if (m_dispatcher != null)
42 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); 43 m_dispatcher.Enqueue(RejectImpl, error);
43 44 else
44 if (rejected != null) 45 RejectImpl(error);
45 RejectHandler = PromiseHandler.Create(rejected, m_next); 46 } else {
47 m_next.Reject(error);
48 }
46 } 49 }
47 50
48 protected override void DefaultReject(Exception reason) { 51 void RejectImpl(Exception error) {
49 m_next.Reject(reason); 52 m_rejected(error, m_next);
50 } 53 }
51 54
52 protected override void DefaultResolve() { 55 public static PromiseFuncReaction<TRet> Create(Func<TRet> fulfilled, Func<Exception, TRet> rejected, IDispatcher dispatcher) {
53 throw new NotImplementedException(); 56 return new PromiseFuncReaction<TRet>(
57 fulfilled != null ? PromiseHandler.Create(fulfilled) : null,
58 rejected != null ? PromiseHandler.Create(rejected) : null,
59 new Deferred<TRet>(),
60 dispatcher
61 );
62 }
63
64 public static PromiseFuncReaction<TRet> Create(Func<IPromise<TRet>> fulfilled, Func<Exception, TRet> rejected, IDispatcher dispatcher) {
65 return new PromiseFuncReaction<TRet>(
66 fulfilled != null ? PromiseHandler.Create(fulfilled) : null,
67 rejected != null ? PromiseHandler.Create(rejected) : null,
68 new Deferred<TRet>(),
69 dispatcher
70 );
71 }
72
73 public static PromiseFuncReaction<TRet> Create(Func<TRet> fulfilled, Func<Exception, IPromise<TRet>> rejected, IDispatcher dispatcher) {
74 return new PromiseFuncReaction<TRet>(
75 fulfilled != null ? PromiseHandler.Create(fulfilled) : null,
76 rejected != null ? PromiseHandler.Create(rejected) : null,
77 new Deferred<TRet>(),
78 dispatcher
79 );
80 }
81
82 public static PromiseFuncReaction<TRet> Create(Func<IPromise<TRet>> fulfilled, Func<Exception, IPromise<TRet>> rejected, IDispatcher dispatcher) {
83 return new PromiseFuncReaction<TRet>(
84 fulfilled != null ? PromiseHandler.Create(fulfilled) : null,
85 rejected != null ? PromiseHandler.Create(rejected) : null,
86 new Deferred<TRet>(),
87 dispatcher
88 );
54 } 89 }
55 } 90 }
56 } 91 }