Mercurial > pub > ImplabNet
diff Implab/PromiseFuncReaction`2.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 | |
children | d82909310094 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab/PromiseFuncReaction`2.cs Tue Jan 30 01:37:17 2018 +0300 @@ -0,0 +1,56 @@ +using System; +using System.Diagnostics; + +namespace Implab { + class PromiseFuncReaction<TIn, TRet> : PromiseReaction<TIn> { + readonly Deferred<TRet> m_next; + + public IPromise<TRet> Promise { + get { return m_next.Promise; } + } + + public PromiseFuncReaction(Func<TIn, TRet> fulfilled, Func<Exception, TRet> rejected, IDispatcher dispatcher) : base(dispatcher) { + m_next = new Deferred<TRet>(dispatcher); + if (fulfilled != null) + FulfilHandler = PromiseHandler.Create(fulfilled, m_next); + + if (rejected != null) + RejectHandler = PromiseHandler.Create(rejected, m_next); + } + + public PromiseFuncReaction(Func<TIn, IPromise<TRet>> fulfilled, Func<Exception, IPromise<TRet>> rejected, IDispatcher dispatcher) : base(dispatcher) { + m_next = new Deferred<TRet>(dispatcher); + if (fulfilled != null) + FulfilHandler = PromiseHandler.Create(fulfilled, m_next); + + if (rejected != null) + RejectHandler = PromiseHandler.Create(rejected, m_next); + } + + public PromiseFuncReaction(Func<TIn, TRet> fulfilled, Func<Exception, IPromise<TRet>> rejected, IDispatcher dispatcher) : base(dispatcher) { + m_next = new Deferred<TRet>(dispatcher); + if (fulfilled != null) + FulfilHandler = PromiseHandler.Create(fulfilled, m_next); + + if (rejected != null) + RejectHandler = PromiseHandler.Create(rejected, m_next); + } + + public PromiseFuncReaction(Func<TIn, IPromise<TRet>> fulfilled, Func<Exception, TRet> rejected, IDispatcher dispatcher) : base(dispatcher) { + m_next = new Deferred<TRet>(dispatcher); + if (fulfilled != null) + FulfilHandler = PromiseHandler.Create(fulfilled, m_next); + + if (rejected != null) + RejectHandler = PromiseHandler.Create(rejected, m_next); + } + + protected override void DefaultReject(Exception reason) { + m_next.Reject(reason); + } + + protected override void DefaultResolve(TIn result) { + m_next.Resolve((TRet)(object)result); + } + } +} \ No newline at end of file