246
|
1 using System;
|
|
2
|
|
3 namespace Implab {
|
247
|
4 abstract class PromiseReaction<T> : IResolvable<T> {
|
|
5 readonly IDispatcher m_dispatcher;
|
|
6
|
|
7 protected PromiseReaction(IDispatcher dispatcher) {
|
|
8 m_dispatcher = dispatcher;
|
|
9 }
|
246
|
10
|
247
|
11 protected abstract bool HasFulfilHandler {
|
|
12 get;
|
|
13 }
|
246
|
14
|
247
|
15 protected abstract bool HasRejectHandler {
|
|
16 get;
|
|
17 }
|
246
|
18
|
|
19 public void Reject(Exception error) {
|
247
|
20 if (!HasRejectHandler)
|
|
21 DefaultReject(error);
|
|
22 else if (m_dispatcher != null)
|
|
23 m_dispatcher.Enqueue(() => RejectImpl(error));
|
246
|
24 else
|
247
|
25 RejectImpl(error);
|
246
|
26 }
|
|
27
|
|
28 public void Resolve(T result) {
|
247
|
29 if (!HasFulfilHandler)
|
|
30 DefaultResolve(result);
|
|
31 else if (m_dispatcher != null)
|
|
32 m_dispatcher.Enqueue(() => ResolveImpl(result));
|
246
|
33 else
|
247
|
34 ResolveImpl(result);
|
246
|
35 }
|
247
|
36
|
|
37 protected abstract void ResolveImpl(T result);
|
|
38
|
|
39 protected abstract void RejectImpl(Exception reason);
|
|
40
|
|
41 protected abstract void DefaultResolve(T result);
|
|
42
|
|
43 protected abstract void DefaultReject(Exception reason);
|
246
|
44 }
|
|
45 } |