diff Implab/Deferred`1.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 5aa9cfbe56c3
children d82909310094
line wrap: on
line diff
--- a/Implab/Deferred`1.cs	Fri Jan 26 18:46:27 2018 +0300
+++ b/Implab/Deferred`1.cs	Tue Jan 30 01:37:17 2018 +0300
@@ -3,10 +3,13 @@
 
 namespace Implab {
     public class Deferred<T> : IResolvable<T> {
-        readonly AbstractPromise<T> m_promise;
+        readonly Promise<T> m_promise;
         readonly IDispatcher m_dispatcher;
 
-        internal Deferred(AbstractPromise<T> promise, IDispatcher dispatcher) {
+        internal Deferred(IDispatcher dispatcher) : this(new Promise<T>(), dispatcher) {
+        }
+
+        internal Deferred(Promise<T> promise, IDispatcher dispatcher) {
             Debug.Assert(promise != null);
             m_promise = promise;
             m_dispatcher = dispatcher;
@@ -17,11 +20,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(T value) {
-            m_promise.Resolve(value);
+            m_promise.ResolvePromise(value);
         }
 
         public void Resolve(IPromise<T> thenable) {
@@ -32,7 +38,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);
         }