Переклад не закінчено. Будь ласка, допоможіть перекласти цю статтю з англійської.

Promise.race(iterable) метод, що повертає обіцянку, яка виконується або відхиляється, як тільки одна з переданих у метод ітерабельних обіцянок виконається чи відхилиться зі значеням або причиною.

Syntax

Promise.race(iterable);

Параметри

iterable
Ітерабельний об'єкт, наприклад, Array. Дивись iterable.

Return value

A pending Promise that resolves or rejects asynchronically (as soon as the stack is empty) as soon as one of the promises in the given iterable resolves or rejects, adopting that first promise's value as its value.

Опис

Функція race повертає Promise , обіцянку, яка виконається таким чином (і отримає таке ж значення) як і перша виконана обіцянка посеред усіх, що були передані в метод у вигляді ітерабельного об'єкта.

Якщо передано пустий ітерабельний об'єкт, така обіцянка буде вічно перебувати в стані очікування.

Якщо ітерабельний об'єкт містить одне або більше значень. які не є обіцянками (Promise), або обіцянки, які вже були виконані чи відхилені, - Promise.race  виконає перше таке значення, що буде знайдено в ітерабельному об'єкті.

Приклади

Асинхронність Promise.race

Цей приклад демострує асинхронність функції Promise.race:

// we are passing as argument an array of promises that are already resolved,
// to trigger Promise.race as soon as possible
var 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 empty
setTimeout(function(){
    console.log('the stack is now empty');
    console.log(p);
});

// logs, in order:
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: 33 }

Пустий ітерабельний об'єкт спричиняє поверення обіцянки, яка вічно знаходитиметься в стані очікування:

var foreverPendingPromise = Promise.race([]);
console.log(foreverPendingPromise);
setTimeout(function(){
    console.log('Стек пустий');
    console.log(foreverPendingPromise);
});

// logs, in order:
// Promise { <state>: "pending" }
// Стек пустий
// Promise { <state>: "pending" }

Якщо ітерабельний об'єкт містить одне або більше значень. які не є обіцянками, або обіцянки, які вже були виконані чи відхилені, - Promise.race  виконає перше таке значення, що буде знайдено в масиві:

var foreverPendingPromise = Promise.race([]);
var alreadyResolvedProm = Promise.resolve(666);

var arr = [foreverPendingPromise, alreadyResolvedProm, "non-Promise value"];
var arr2 = [foreverPendingPromise, "non-Promise value", Promise.resolve(666)];
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 { <state>: "pending" } 
// Promise { <state>: "pending" } 
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: 666 }
// Promise { <state>: "fulfilled", <value>: "non-Promise value" }

Використання Promise.race – приклади з setTimeout

var p1 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 500, 'one'); 
});
var p2 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 100, 'two'); 
});

Promise.race([p1, p2]).then(function(value) {
  console.log(value); // "two"
  // Both resolve, but p2 is faster
});

var p3 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 100, 'three');
});
var p4 = new Promise(function(resolve, reject) { 
    setTimeout(reject, 500, 'four'); 
});

Promise.race([p3, p4]).then(function(value) {
  console.log(value); // "three"
  // p3 is faster, so it resolves
}, function(reason) {
  // Not called
});

var p5 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 500, 'five'); 
});
var p6 = new Promise(function(resolve, reject) { 
    setTimeout(reject, 100, 'six');
});

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

Специфікація

Специфікація Статус Примітка
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Promise.race' in that specification.
Standard Initial definition in an ECMA standard.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Promise.race' in that specification.
Draft  

Browser compatibility

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support32 Yes29 No198
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support4.4.432 Yes29 Yes8 Yes

See also

Мітки документа й учасники

 Зробили внесок у цю сторінку: 77bo
 Востаннє оновлена: 77bo,