Mercurial > pub > ImplabNet
view Implab/PromiseFuncReaction`1.cs @ 247:fb70574741a1 v3
working on promises
author | cin |
---|---|
date | Fri, 26 Jan 2018 18:46:27 +0300 |
parents | |
children | 5cb4826c2c2a |
line wrap: on
line source
using System; using System.Diagnostics; namespace Implab { class PromiseFuncReaction<TRet> : PromiseReaction { readonly Action m_fulfilled; readonly Action<Exception> m_rejected; readonly Deferred<TRet> m_next; public PromiseFuncReaction(Func<TRet> fulfilled, Func<Exception, TRet> rejected, Deferred<TRet> next, IDispatcher dispatcher) : base(dispatcher) { if (fulfilled != null) m_fulfilled = () => { next.Resolve(fulfilled()); }; if (rejected != null) m_rejected = (e) => { next.Resolve(rejected(e)); }; m_next = next; } public PromiseFuncReaction(Func<IPromise<TRet>> fulfilled, Func<Exception, IPromise<TRet>> rejected, Deferred<TRet> next, IDispatcher dispatcher) : base(dispatcher) { if (fulfilled != null) m_fulfilled = () => { next.Resolve(fulfilled()); }; if (rejected != null) m_rejected = (e) => { next.Resolve(rejected(e)); }; m_next = next; } public PromiseFuncReaction(Func<TRet> fulfilled, Func<Exception, IPromise<TRet>> rejected, Deferred<TRet> next, IDispatcher dispatcher) : base(dispatcher) { if (fulfilled != null) m_fulfilled = () => { next.Resolve(fulfilled()); }; if (rejected != null) m_rejected = (e) => { next.Resolve(rejected(e)); }; m_next = next; } public PromiseFuncReaction(Func<IPromise<TRet>> fulfilled, Func<Exception, TRet> rejected, Deferred<TRet> next, IDispatcher dispatcher) : base(dispatcher) { if (fulfilled != null) m_fulfilled = () => { next.Resolve(fulfilled()); }; if (rejected != null) m_rejected = (e) => { next.Resolve(rejected(e)); }; m_next = next; } protected override bool HasFulfilHandler => m_fulfilled != null; protected override bool HasRejectHandler => m_rejected != null; protected override void DefaultReject(Exception reason) { m_next.Reject(reason); } protected override void DefaultResolve() { throw new NotImplementedException(); } protected override void RejectImpl(Exception reason) { try { m_rejected(reason); } catch (Exception e){ m_next.Reject(e); } } protected override void ResolveImpl() { try { m_fulfilled(); } catch (Exception e){ m_next.Reject(e); } } } }