--- title: Promise.race() slug: Web/JavaScript/Reference/Global_Objects/Promise/race tags: - ECMAScript 2015 - JavaScript - Promise - метод translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race ---
Метод Promise.race() повертає проміс, який виконується чи відхиляється, як тільки один з промісів ітерабельного об'єкта буде виконаний чи відхилений, зі значеням або причиною з цього проміса.
Початковий код до цього інтерактивного демо зберігаєтся в GitHub репозиторії. Якщо ви хочете внести свій вклад до проекту цього інтерактивного демо, будь ласка, клонуйте https://github.com/mdn/interactive-examples і надішліть нам запит на злиття.
Promise.race(iterable);
Об'єкт {{jsxref("Promise")}} у стані очікування, який асинхронно видає значення першого проміса з наданого ітерабельного об'єкта, що виконується або відхиляється.
Функція race повертає об'єкт Promise, який встановлюється таким самим чином (і отримує таке ж значення), як і перший встановлений проміс ітерабельного об'єкта, переданого як аргумент.
Якщо передано пустий ітерабельний об'єкт, повернений проміс буде вічно перебувати у стані очікування.
Якщо ітерабельний об'єкт містить одне або більше значень, що не є промісами, та/або вже встановлений проміс, тоді Promise.race буде вирішено з першим таким значенням, знайденим в ітерабельному об'єкті.
Promise.raceЦей приклад демострує асинхронність функції Promise.race:
// ми передаємо в якості аргументу масив вже вирішених промісів,
// щоб запустити Promise.race якомога швидше
var resolvedPromisesArray = [Promise.resolve(33), Promise.resolve(44)];
var p = Promise.race(resolvedPromisesArray);
// негайно виводимо значення p
console.log(p);
// використовуючи setTimeout, ми можемо виконати код, коли стек стане порожнім
setTimeout(function(){
console.log('тепер стек порожній');
console.log(p);
});
// порядок виведення:
// Promise { <state>: "pending" }
// тепер стек порожній
// Promise { <state>: "fulfilled", <value>: 33 }
Пустий ітерабельний об'єкт спричиняє поверення проміса, який вічно знаходитиметься в стані очікування:
var foreverPendingPromise = Promise.race([]);
console.log(foreverPendingPromise);
setTimeout(function(){
console.log('тепер стек порожній');
console.log(foreverPendingPromise);
});
// порядок виведення:
// Promise { <state>: "pending" }
// тепер стек порожній
// Promise { <state>: "pending" }
Якщо ітерабельний об'єкт містить одне або більше значень, що не є промісами, та/або вже встановлені проміси, тоді Promise.race буде вирішено з першим таким значенням, знайденим у масиві:
var foreverPendingPromise = Promise.race([]);
var alreadyResolvedProm = Promise.resolve(666);
var arr = [foreverPendingPromise, alreadyResolvedProm, "не проміс"];
var arr2 = [foreverPendingPromise, "не проміс", Promise.resolve(666)];
var p = Promise.race(arr);
var p2 = Promise.race(arr2);
console.log(p);
console.log(p2);
setTimeout(function(){
console.log('тепер стек порожній');
console.log(p);
console.log(p2);
});
// порядок виведення:
// Promise { <state>: "pending" }
// Promise { <state>: "pending" }
// тепер стек порожній
// Promise { <state>: "fulfilled", <value>: 666 }
// Promise { <state>: "fulfilled", <value>: "не проміс" }
Promise.race – приклади з setTimeoutvar p1 = new Promise(function(resolve, reject) {
setTimeout(() => resolve('один'), 500);
});
var p2 = new Promise(function(resolve, reject) {
setTimeout(() => resolve('два'), 100);
});
Promise.race([p1, p2])
.then(function(value) {
console.log(value); // "два"
// Обидва вирішуються, але p2 швидший
});
var p3 = new Promise(function(resolve, reject) {
setTimeout(() => resolve('три'), 100);
});
var p4 = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('чотири')), 500);
});
Promise.race([p3, p4])
.then(function(value) {
console.log(value); // "три"
// p3 швидший, тому він виконується
}, function(reason) {
// Не викликається
});
var p5 = new Promise(function(resolve, reject) {
setTimeout(() => resolve("п'ять"), 500);
});
var p6 = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error('шість')), 100);
});
Promise.race([p5, p6])
.then(function(value) {
// Не викликається
}, function(reason) {
console.log(reason); // "шість"
// p6 швидший, тому він відхиляється
});
| Специфікація |
|---|
| {{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}} |
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
{{Compat("javascript.builtins.Promise.race")}}