为什么我的Promise.race实现无法正常工作?

时间:2019-04-19 14:54:04

标签: javascript ecmascript-6 promise

我有一个任务,应该在不使用itef的情况下实现Promise.race函数。

我已经找到了可以运行的代码,但是控制台抛出错误

"TypeError: promise is not a function"

function promiseRace(...promises) {
return new Promise((resolve, reject) => {
    for(const promise of promises)
       promise.then(resolve, reject);
 })
};

我也尝试过这个,但是它显示了相同的错误(大约p):

const promiseRace = (...promises) {
  new Promise((res, rej) => {
    promises.forEach(p => p.then(res).catch(rej));
  })
};

有人知道为什么它不起作用吗?

1 个答案:

答案 0 :(得分:1)

您的后一个示例缺少第二行的return语句:*return* new Promise(...

您的第一个示例正常工作(请参见下文),但请注意,标准Promise.race接受数组参数,而您的实现接受可变参数:

function promiseRace(...promises) {
  return new Promise((resolve, reject) => {
    for (const promise of promises)
      promise.then(resolve, reject);
  })
}

let slowPromise = new Promise(r => setTimeout(() => r('slow'), 2000));
let quickPromise = new Promise(r => setTimeout(() => r('quick'), 1000));

promiseRace(slowPromise, quickPromise).then(a => console.log('promiseRace', a));

Promise.race([slowPromise, quickPromise]).then(a => console.log('Promise.race', a));