文章 评论 浏览 29
Tip:
Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个 promise 解决或拒绝,返回的 promise 就会解决或拒绝
判断函数参数是否是可迭代的(很多答案都忽略了)
const isIterable = (data, reject) => { const type = typeof data; if (!data[Symbol.iterator]) { if (reject) { reject( new TypeError( `${type} ${data} is not iterable (cannot read property Symbol(Symbol.iterator))` ) ); } else { throw new TypeError( `${type} ${data} is not iterable (cannot read property Symbol(Symbol.iterator))` ); } } }; Promise.myRace = function (promises) { return new Promise((resolve, reject) => { isIterable(promises, reject); // 判断是否是迭代对象 const promiseArray = [...promises]; promiseArray.forEach((pr) => { if (!(pr instanceof Promise)) { pr = Promise.resolve(pr); } pr.then(resolve, reject); }); }); }; const promise1 = new Promise((resolve, reject) => { setTimeout(resolve, 500, "one"); }); const promise2 = new Promise((resolve, reject) => { setTimeout(reject, 100, "two"); }); Promise.myRace([promise1, promise2]) .then((value) => { console.log("value", value); // Both resolve, but promise2 is faster }) .catch((err) => { console.log("err", err); });
文章 0 评论 0
接受
Tip:
第 89 题:设计并实现 Promise.race()