los Promise.race() El método devuelve una promesa que se cumple o rechaza tan pronto como una de las promesas en un iterable se cumple o rechaza, con el valor o la razón de esa promesa.

Sintaxis

Promise.race(iterable);

Parámetros

iterable
Un objeto iterable, como un Array. Ver iterable.

Valor devuelto

A pendientePromise ese asincrónicamente produce el valor de la primera promesa en el iterable dado para cumplir o rechazar.

Descripción

los race la función devuelve un Promise que se establece de la misma manera (y toma el mismo valor) que la primera promesa que se establece entre las promesas del iterable pasado como argumento.

Si el iterable pasado está vacío, la promesa devuelta estará pendiente para siempre.

Si el iterable contiene uno o más valores no prometidos y / o una promesa ya establecida, entonces Promise.race se resolverá en el primero de estos valores que se encuentran en el iterable.

Ejemplos de

Asincronicidad de Promise.race

Este siguiente ejemplo demuestra la asincronicidad de Promise.race:

// we are passing as argument an array of promises that are already resolved,// to trigger Promise.race as soon as possiblevar resolvedPromisesArray =[Promise.resolve(33), Promise.resolve(44)];var p = Promise.race(resolvedPromisesArray);// immediately logging the value of p
console.log(p);// using setTimeout we can execute code after the stack is emptysetTimeout(function()
    console.log('the stack is now empty');
    console.log(p););// logs, in order:// Promise  : "pending" // the stack is now empty// Promise  : "fulfilled", : 33 

Un iterable vacío hace que la promesa devuelta esté pendiente para siempre:

var foreverPendingPromise = Promise.race([]);
console.log(foreverPendingPromise);setTimeout(function()
    console.log('the stack is now empty');
    console.log(foreverPendingPromise););// logs, in order:// Promise  : "pending" // the stack is now empty// Promise  : "pending" 

Si el iterable contiene uno o más valores no prometidos y / o una promesa ya establecida, entonces Promise.race se resolverá en el primero de estos valores que se encuentran en el array:

var foreverPendingPromise = Promise.race([]);var alreadyFulfilledProm = Promise.resolve(100);var arr =[foreverPendingPromise, alreadyFulfilledProm,"non-Promise value"];var arr2 =[foreverPendingPromise,"non-Promise value", Promise.resolve(100)];var p = Promise.race(arr);var p2 = Promise.race(arr2);

console.log(p);
console.log(p2);setTimeout(function()
    console.log('the stack is now empty');
    console.log(p);
    console.log(p2););// logs, in order:// Promise  : "pending" // Promise  : "pending" // the stack is now empty// Promise  : "fulfilled", : 100 // Promise  : "fulfilled", : "non-Promise value" 

Usando Promise.race – ejemplos con setTimeout

var p1 =newPromise(function(resolve, reject)setTimeout(()=>resolve('one'),500););var p2 =newPromise(function(resolve, reject)setTimeout(()=>resolve('two'),100););

Promise.race([p1, p2]).then(function(value)
  console.log(value);// "two"// Both fulfill, but p2 is faster);var p3 =newPromise(function(resolve, reject)setTimeout(()=>resolve('three'),100););var p4 =newPromise(function(resolve, reject)setTimeout(()=>reject(newError('four')),500););

Promise.race([p3, p4]).then(function(value)
  console.log(value);// "three"// p3 is faster, so it fulfills,function(error)// Not called);var p5 =newPromise(function(resolve, reject)setTimeout(()=>resolve('five'),500););var p6 =newPromise(function(resolve, reject)setTimeout(()=>reject(newError('six')),100););

Promise.race([p5, p6]).then(function(value)// Not called,function(error)
  console.log(error.message);// "six"// p6 is faster, so it rejects);

Comparación con Promise.any

Promise.race toma el primer asentado Promise.

const promise1 =newPromise((resolve, reject)=>setTimeout(resolve,500,'one'););const promise2 =newPromise((resolve, reject)=>setTimeout(reject,100,'two'););

Promise.race([promise1, promise2]).then((value)=>
  console.log('succeeded with value:', value);).catch((reason)=>// Only promise1 is fulfilled, but promise2 is faster
  console.log('failed with reason:', reason););// expected output: "failed with reason: two"

Promise.any toma el primero cumplido Promise.

const promise1 =newPromise((resolve, reject)=>setTimeout(resolve,500,'one'););const promise2 =newPromise((resolve, reject)=>setTimeout(reject,100,'two'););

Promise.any([promise1, promise2]).then((value)=>// Only promise1 is fulfilled, even though promise2 settled sooner
  console.log('succeeded with value:', value);).catch((reason)=>
  console.log('failed with reason:', reason););// expected output: "succeeded with value: one"

Especificaciones

Especificación
Especificación del lenguaje ECMAScript (ECMAScript)
# sec-promise.race

Compatibilidad del navegador

Escritorio Móvil
Cromo Borde Firefox explorador de Internet Ópera Safari WebView Android Chrome Android Firefox para Android Opera Android Safari en IOS Internet de Samsung
race 32 12 29 No 19 8 4.4.3 32 29 19 8 2.0

Ver también

  • Promise
  • Promise.all()