Mercurial > pub > ImplabNet
comparison Implab/PromiseActionReaction.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 PromiseActionReaction : PromiseReaction { | 5 class PromiseActionReaction : IResolvable { |
6 | 6 |
7 readonly Deferred m_next; | 7 readonly Deferred m_next; |
8 | |
9 readonly IDispatcher m_dispatcher; | |
10 | |
11 readonly Action<Deferred> m_fulfilled; | |
12 | |
13 readonly Action<Exception, Deferred> m_rejected; | |
8 | 14 |
9 public IPromise Promise { | 15 public IPromise Promise { |
10 get { return m_next.Promise; } | 16 get { return m_next.Promise; } |
11 } | 17 } |
12 | 18 |
13 public PromiseActionReaction(Action fulfilled, Action<Exception> rejected, IDispatcher dispatcher) : base(dispatcher) { | 19 public PromiseActionReaction(Action<Deferred> fulfilled, Action<Exception, Deferred> rejected, Deferred next, IDispatcher dispatcher) { |
14 m_next = new Deferred(dispatcher); | 20 m_next = next; |
15 if (fulfilled != null) | 21 m_fulfilled = fulfilled; |
16 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); | 22 m_rejected = rejected; |
17 | 23 m_dispatcher = dispatcher; |
18 if (rejected != null) | |
19 RejectHandler = PromiseHandler.Create(rejected, m_next); | |
20 } | 24 } |
21 | 25 |
22 public PromiseActionReaction(Func<IPromise> fulfilled, Func<Exception, IPromise> rejected, IDispatcher dispatcher) : base(dispatcher) { | 26 public void Resolve() { |
23 m_next = new Deferred(dispatcher); | 27 if (m_fulfilled != null) { |
24 if (fulfilled != null) | 28 if (m_dispatcher != null) |
25 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); | 29 m_dispatcher.Enqueue(ResolveImpl); |
26 | 30 else |
27 if (rejected != null) | 31 ResolveImpl(); |
28 RejectHandler = PromiseHandler.Create(rejected, m_next); | 32 } else { |
33 m_next.Resolve(); | |
34 } | |
29 } | 35 } |
30 | 36 |
31 public PromiseActionReaction(Action fulfilled, Func<Exception, IPromise> rejected, IDispatcher dispatcher) : base(dispatcher) { | 37 void ResolveImpl() { |
32 m_next = new Deferred(dispatcher); | 38 m_fulfilled(m_next); |
33 if (fulfilled != null) | |
34 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); | |
35 | |
36 if (rejected != null) | |
37 RejectHandler = PromiseHandler.Create(rejected, m_next); | |
38 } | 39 } |
39 | 40 |
40 public PromiseActionReaction(Func<IPromise> fulfilled, Action<Exception> rejected, IDispatcher dispatcher) : base(dispatcher) { | 41 public void Reject(Exception error) { |
41 m_next = new Deferred(dispatcher); | 42 if (m_fulfilled != null) { |
42 if (fulfilled != null) | 43 if (m_dispatcher != null) |
43 FulfilHandler = PromiseHandler.Create(fulfilled, m_next); | 44 m_dispatcher.Enqueue(RejectImpl, error); |
44 | 45 else |
45 if (rejected != null) | 46 RejectImpl(error); |
46 RejectHandler = PromiseHandler.Create(rejected, m_next); | 47 } else { |
48 m_next.Reject(error); | |
49 } | |
47 } | 50 } |
48 | 51 |
49 protected override void DefaultReject(Exception reason) { | 52 void RejectImpl(Exception error) { |
50 m_next.Reject(reason); | 53 m_rejected(error, m_next); |
51 } | 54 } |
52 | 55 |
53 protected override void DefaultResolve() { | 56 public static PromiseActionReaction Create(Action fulfilled, Action<Exception> rejected, IDispatcher dispatcher) { |
54 m_next.Resolve(); | 57 return new PromiseActionReaction( |
58 fulfilled != null ? PromiseHandler.Create(fulfilled) : null, | |
59 rejected != null ? PromiseHandler.Create(rejected) : null, | |
60 new Deferred(), | |
61 dispatcher | |
62 ); | |
63 } | |
64 | |
65 public static PromiseActionReaction Create(Func<IPromise> fulfilled, Action<Exception> rejected, IDispatcher dispatcher) { | |
66 return new PromiseActionReaction( | |
67 fulfilled != null ? PromiseHandler.Create(fulfilled) : null, | |
68 rejected != null ? PromiseHandler.Create(rejected) : null, | |
69 new Deferred(), | |
70 dispatcher | |
71 ); | |
72 } | |
73 | |
74 public static PromiseActionReaction Create(Action fulfilled, Func<Exception, IPromise> rejected, IDispatcher dispatcher) { | |
75 return new PromiseActionReaction( | |
76 fulfilled != null ? PromiseHandler.Create(fulfilled) : null, | |
77 rejected != null ? PromiseHandler.Create(rejected) : null, | |
78 new Deferred(), | |
79 dispatcher | |
80 ); | |
81 } | |
82 | |
83 public static PromiseActionReaction Create(Func<IPromise> fulfilled, Func<Exception, IPromise> rejected, IDispatcher dispatcher) { | |
84 return new PromiseActionReaction( | |
85 fulfilled != null ? PromiseHandler.Create(fulfilled) : null, | |
86 rejected != null ? PromiseHandler.Create(rejected) : null, | |
87 new Deferred(), | |
88 dispatcher | |
89 ); | |
55 } | 90 } |
56 } | 91 } |
57 } | 92 } |