diff Implab/Deferred.cs @ 248:5cb4826c2c2a v3

Added awaiters to promises Added static methods to Promise Resolve, Reject, All. Updated promise helpers
author cin
date Tue, 30 Jan 2018 01:37:17 +0300
parents b904e0a3ba72
children d82909310094
line wrap: on
line diff
--- a/Implab/Deferred.cs	Fri Jan 26 18:46:27 2018 +0300
+++ b/Implab/Deferred.cs	Tue Jan 30 01:37:17 2018 +0300
@@ -7,10 +7,13 @@
     /// </summary>
     public class Deferred : IResolvable {
 
-        readonly AbstractPromise m_promise;
+        readonly Promise m_promise;
         readonly IDispatcher m_dispatcher;
 
-        internal Deferred(AbstractPromise promise, IDispatcher dispatcher) {
+        internal Deferred(IDispatcher dispatcher) : this(new Promise(), dispatcher) {
+        }
+
+        internal Deferred(Promise promise, IDispatcher dispatcher) {
             Debug.Assert(promise != null);
             m_promise = promise;
             m_dispatcher = dispatcher;
@@ -21,11 +24,14 @@
         }
 
         public void Reject(Exception error) {
-            m_promise.Reject(error);
+            if (error is PromiseTransientException)
+                error = ((PromiseTransientException)error).InnerException;
+
+            m_promise.RejectPromise(error);
         }
 
         public void Resolve() {
-            m_promise.Resolve();
+            m_promise.ResolvePromise();
         }
 
         public void Resolve(IPromise thenable) {
@@ -36,7 +42,7 @@
 
             else if (m_dispatcher != null)
                 // dispatch (see ecma-262/6.0: 25.4.1.3.2 Promise Resolve Functions)
-                m_dispatcher.Enqueue(() => Chain(thenable));
+                m_dispatcher.Enqueue(Chain, thenable);
             else
                 Chain(thenable);
         }