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

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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Basic supportChrome Full support 32Edge Full support YesFirefox Full support 29IE No support NoOpera Full support 19Safari Full support 8WebView Android Full support 4.4.3Chrome Android Full support 32Edge Mobile Full support YesFirefox Android Full support 29Opera Android Full support YesSafari iOS Full support 8Samsung Internet Android Full support Yesnodejs Full support 0.12

Legend

Full support  
Full support
No support  
No support

See also

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

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