es6-promise-chain
Version:
ES6/Typescript Synchronous Promise Chaining Library
32 lines (25 loc) • 935 B
text/typescript
export function _for(callbacks: Array<() => Promise<any>>): Promise<any[]> {
let defer: Promise<Promise<any>[]> = new Promise((resolve, reject) => {
let promises: Promise<any>[] = [];
_forCallback(callbacks, resolve, reject, promises, 0);
return promises;
});
return defer;
}
export function _forCallback<T>(callbacks: Array<() => Promise<any>>,
resolve: (value?: {} | Thenable<T>) => void,
reject: (value?: {} | Thenable<T>) => void,
resolutions: any[],
index: number) {
if(callbacks[index]) {
let callback = callbacks.shift();
callback().then((resolution: any) => {
resolutions.push(resolution);
_forCallback(callbacks, resolve, reject, resolutions, ++index);
}).catch((err: any) => {
reject(err);
});
} else {
resolve(resolutions);
}
}