139
*/
140
export function raceCancellablePromises<T>(cancellablePromises: (CancelablePromise<T> | Promise<T>)[]): CancelablePromise<T> {
141
>
let resolvedPromiseIndex = -1;
async.ts
142
>
const promises = cancellablePromises.map((promise, index) => promise.then(result => { resolvedPromiseIndex = index; return result; }));
143
>
const promise = Promise.race(promises) as CancelablePromise<T>;
144
>
promise.cancel = () => {
145
>
cancellablePromises.forEach((cancellablePromise, index) => {
146
>
if (index !== resolvedPromiseIndex && (cancellablePromise as CancelablePromise<T>).cancel) {
147
>
(cancellablePromise as CancelablePromise<T>).cancel();
148
>
}
149
>
});
150
>
};
151
>
promise.finally(() => {
152
>
promise.cancel();
153
>
});
154
>
return promise;
155
>
}
156
157
export function raceTimeout<T>(promise: Promise<T>, timeout: number, onTimeout?: () => void): Promise<T | undefined> {