我有一个任务,应该在不使用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));
})
};
有人知道为什么它不起作用吗?
答案 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));