public static IPromise <IPromise[]> When(params IPromise[] promises) { var def = new Deferred <IPromise[]>(); foreach (var prom in promises) { prom.Done(() => { lock (promises) { if (promises.All(p => p.IsResolved())) { def.Resolve(promises); } } }) .Fail((error) => { if (promises.All(p => !p.IsPending())) { def.Reject(); } }); } return(def.Promise()); }
public virtual IPromise Then(IPromise nextPromise) { var nextDeferred = new Deferred(); this.Done(() => { nextPromise .Done(() => { nextDeferred.Resolve(); }) .Fail((error) => { nextDeferred.Reject(error); }); }) .Fail((error) => { nextDeferred.Reject(error); }); return(nextDeferred.Promise()); }