Promise.race
接收一个可迭代对象作为参数,当某个成员 Promise 状态变更后(无论是 Fulfilled 状态还是 Rejected 状态),立即调用指定的函数。
语法:
Promise.race(iterator);
类型声明:
interface PromiseConstructor {race<T>(values: readonly T[]): Promse<T extends PromiseLike<infer U> ? U : T>;}interface PromiseLike<T> {then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): PromiseLike<TResult1 | TResult2>;}
参数说明:
参数 | 说明 | 类型 |
---|---|---|
iterator | 可迭代对象,例如数组 | Iterator |
Promise.race
的 iterator
参数必须是 Iteratoriterator
的其中某个 Promise 实例成员的状态变更,那么 Promise.race
会立即返回一个新创建的 Promise 实例,并将返回值传递给回调函数Promise.race
方法的参数与 Promise.all
方法一样,如果不是 Promise 实例,就会先调用 Promise.resolve 方法,将参数转为 Promise 实例,再进一步处理。const getPromise = (value: number, delay: number, fail: boolean): Promise<number> => {return new Promise<number>((resolve, reject) => {setTimeout(() => (fail ? reject(value) : resolve(value)), delay);});};const fastestPromise = Promise.race<number>([getPromise(0, 500, false), // 0.5sgetPromise(1, 2000, false), // 2sgetPromise(2, 1000, true), // 1s (rejects)]);console.time('settled-in');fastestPromise.then((value) => {console.log('Fulfilled:', value);}).catch((err) => {console.log('Rejected:', err);}).finally(() => {console.timeEnd('settled-in');});