using System; using System.Diagnostics; namespace Implab { class PromiseFuncReaction : PromiseReaction { readonly Deferred m_next; public IPromise Promise { get { return m_next.Promise; } } public PromiseFuncReaction(Func fulfilled, Func rejected, IDispatcher dispatcher) : base(dispatcher) { m_next = new Deferred(dispatcher); if (fulfilled != null) FulfilHandler = PromiseHandler.Create(fulfilled, m_next); if (rejected != null) RejectHandler = PromiseHandler.Create(rejected, m_next); } public PromiseFuncReaction(Func> fulfilled, Func> rejected, IDispatcher dispatcher) : base(dispatcher) { m_next = new Deferred(dispatcher); if (fulfilled != null) FulfilHandler = PromiseHandler.Create(fulfilled, m_next); if (rejected != null) RejectHandler = PromiseHandler.Create(rejected, m_next); } public PromiseFuncReaction(Func fulfilled, Func> rejected, IDispatcher dispatcher) : base(dispatcher) { m_next = new Deferred(dispatcher); if (fulfilled != null) FulfilHandler = PromiseHandler.Create(fulfilled, m_next); if (rejected != null) RejectHandler = PromiseHandler.Create(rejected, m_next); } public PromiseFuncReaction(Func> fulfilled, Func rejected, IDispatcher dispatcher) : base(dispatcher) { m_next = new Deferred(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); } } }