1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| function myPromiseRace(promises) { return new Promise((resolve, reject) => { if (!promises || typeof promises[Symbol.iterator] !== 'function') { return reject(new TypeError('Argument is not iterable')); } for (const promise of promises) { Promise.resolve(promise) .then(resolve) .catch(reject); } }); }
const p1 = new Promise(res => setTimeout(() => res('p1'), 1000)); const p2 = new Promise(res => setTimeout(() => res('p2'), 500)); const p3 = new Promise((res, rej) => setTimeout(() => rej('p3 error'), 300));
myPromiseRace([p1, p2, p3]) .then(console.log) .catch(console.error);
|