Hola, encontramos la solución a tu búsqueda, continúa leyendo y la verás a continuación.
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", // Promise: 100 : "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()
Reseñas y calificaciones
Agradecemos que desees corroborar nuestro cometido poniendo un comentario y dejando una valoración te damos las gracias.