/// <summary> /// Returns a promise that resolves when all of the promises in the enumerable argument have resolved. /// Returns a promise of a collection of the resolved results. /// </summary> public static IPromise <IEnumerable <PromisedT> > All(IEnumerable <IPromise <PromisedT> > promises) { var promisesArray = promises.ToArray(); if (promisesArray.Length == 0) { return(Promise <IEnumerable <PromisedT> > .Resolved(EnumerableExt.Empty <PromisedT>())); } var remainingCount = promisesArray.Length; var results = new PromisedT[remainingCount]; var resultPromise = new Promise <IEnumerable <PromisedT> >(); resultPromise.WithName("All"); promisesArray.Each((promise, index) => { promise .Catch(ex => { if (resultPromise.CurState == PromiseState.Pending) { resultPromise.Reject(ex); } }) .Then(result => { results[index] = result; --remainingCount; if (remainingCount <= 0) { resultPromise.Resolve(results); } }) .Done(); }); return(resultPromise); }
public IPromise <ConvertedT> Transform <ConvertedT>(Func <PromisedT, ConvertedT> transform) { // Argument.NotNull(() => transform); return(Then(value => Promise <ConvertedT> .Resolved(transform(value)))); }