以下为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。