/// <summary>Adds an object to the given set. If the set doesn't exist, it creates one.</summary> private List <PromiseDelegate> add(List <PromiseDelegate> set, bool success, PromiseDelegate toAdd) { if (toAdd == null) { return(set); } // Already complete? if (state != PROMISE_PENDING) { // Instantly run: if ((success && state == PROMISE_FULFILLED)) { toAdd(latestMessage); } else if ((!success && state == PROMISE_REJECTED)) { toAdd(latestMessage); } return(set); } if (set == null) { set = new List <PromiseDelegate>(); } set.Add(toAdd); return(set); }
/// Add a callback to invoke when the deferred is resolved or rejected /// Notice that if the promise is already resolved (eg. a stupid iterator) /// the callback is invoked as soon as it is called. public void Then(PromiseDelegate <TOk, TErr> callback) { if (_parent.Pending) { _callbacks.Add(callback); } else { callback(_parent.Result); } }
/// <summary>Provides methods to run when this promise completes.</summary> public Promise then(PromiseDelegate onFulfil, PromiseDelegate onReject) { if (target != null) { return(target.then(onFulfil, onReject)); } // Create the frame now: PromiseFrame frame = new PromiseFrame(); frame.success = onFulfil; frame.fail = onReject; // Already complete? if (state != PROMISE_PENDING) { // Instantly run: Promise prom = frame.run((state == PROMISE_FULFILLED), latestMessage); if (prom != null) { // We've got a new target! target = prom; return(prom); } return(this); } // Add a frame now: if (eventsToRun == null) { eventsToRun = new List <PromiseFrame>(); } eventsToRun.Add(frame); return(this); }
/// <summary>Provides methods to run when this promise completes.</summary> public Promise then(PromiseDelegate onFulfil) { return(then(onFulfil, (Promise)null)); }
/// <summary>Provides methods to run when this promise completes.</summary> public Promise then(PromiseDelegate onFulfil, PromiseDelegateVoid onReject) { return(then(onFulfil, toDelegate(onReject))); }
/// <summary>Adds a rejection handler.</summary> public Promise @catch(PromiseDelegate onReject) { return(then((PromiseDelegate)null, onReject)); }
/// <summary>Provides methods to run when this promise completes.</summary> public Promise then(Promise onFulfil, PromiseDelegate onReject) { return(then(toDelegate(true, onFulfil), onReject)); }
/// Set the invoker for this deferred public void Invoke(PromiseDelegate <TOk, TErr> invoker) { _invoker = invoker; }