Tengo el código para mi implementación de Promise.race(), y básicamente funciona . Sin embargo, en este caso:
promiseRace([Promise.reject('test_error'), Promise.resolve('test_value')]) test_value en lugar de test_error .
¿Por qué sucede?
const promiseRace = promises => new Promise((resolve, reject) => { promises.forEach(p => { if ( typeof p === 'object' && 'then' in p && typeof p.then === 'function' ) { p.then(resolve).catch(reject); } else { resolve(p); } }); }); promiseRace([Promise.reject('test_error'), Promise.resolve('test_value')]).then(value => { console.log(value); });Esto sucede porque en la siguiente línea llamas a .catch en otra promesa (encadenada), no en la promesa original:
p.then(resolve).catch(reject); Tenga en cuenta cómo la llamada then no recibe un argumento de devolución de llamada de reject , por lo que hay un ciclo de promesa asíncrono intermedio adicional. En el momento en que se llama a la devolución de llamada .catch ( reject ), el otro caso ya se ha tratado (la promesa cumplida).
Así que cambia a:
p.then(resolve, reject);