以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
35. 实现`Promise.race()`
实现Promise.race()
的代码如下:
function race(promises) {
return new Promise((resolve, reject) => {
for (let promise of promises) {
promise.then(resolve).catch(reject);
}
});
}
该函数接收一个包含Promise实例的数组,返回一个新的Promise实例。
函数内部通过遍历Promise实例数组,将每个Promise实例的resolve和reject方法传递给新的Promise实例。当其中一个Promise实例resolve或reject时,新的Promise实例也会resolve或reject。
使用示例:
let p1 = new Promise(resolve => setTimeout(() => resolve('p1'), 1000));
let p2 = new Promise((resolve, reject) => setTimeout(() => reject('p2'), 500));
let p3 = new Promise(resolve => setTimeout(() => resolve('p3'), 2000));
race([p1, p2, p3])
.then(result => {
console.log(result);
})
.catch(error => {
console.error(error);
});
输出:
p1
在上面的示例中,Promise.race()返回的Promise实例只会resolve第一个完成的Promise实例,也就是p1,p2和p3中谁完成的最快。因为p2在500ms后被reject,而p1和p3分别在1000ms和2000ms后被resolve,所以结果为p1。