aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/promise/race/index.html
blob: c810db2cc0e619be57002bac1dc77aa8c04115c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
---
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
---
<div>{{JSRef}}</div>

<p>Метод <code><strong>Promise.race()</strong></code> повертає проміс, який виконується чи відхиляється, як тільки один з промісів ітерабельного об'єкта буде виконаний чи відхилений, зі значеням або причиною з цього проміса.</p>

<div>{{EmbedInteractiveExample("pages/js/promise-race.html")}}</div>

<p class="hidden">Початковий код до цього інтерактивного демо зберігаєтся в GitHub репозиторії. Якщо ви хочете внести свій вклад до проекту цього інтерактивного демо, будь ласка, клонуйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> і надішліть нам запит на злиття.</p>

<h2 id="Синтаксис">Синтаксис</h2>

<pre class="syntaxbox"><var>Promise.race(iterable)</var>;</pre>

<h3 id="Параметри">Параметри</h3>

<dl>
 <dt>iterable</dt>
 <dd>Ітерабельний об'єкт, наприклад, {{jsxref("Array")}}. Дивіться <a href="/uk/docs/Web/JavaScript/Reference/Протоколи_перебору#Протокол_ітерабельного_обєкта">ітерабельний об'єкт</a>.</dd>
</dl>

<h3 id="Значення_що_повертається">Значення, що повертається</h3>

<p>Об'єкт {{jsxref("Promise")}} <strong>у стані очікування</strong>, який <strong>асинхронно</strong> видає значення першого проміса з наданого ітерабельного об'єкта, що виконується або відхиляється.</p>

<h2 id="Опис">Опис</h2>

<p>Функція <code>race</code> повертає об'єкт <code>Promise</code>, який встановлюється таким самим чином (і отримує таке ж значення), як і перший встановлений проміс ітерабельного об'єкта, переданого як аргумент.</p>

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

<p>Якщо ітерабельний об'єкт містить одне або більше значень, що не є промісами, та/або вже встановлений проміс, тоді <code>Promise.race</code> буде вирішено з першим таким значенням, знайденим в ітерабельному об'єкті.</p>

<h2 id="Приклади">Приклади</h2>

<h3 id="Асинхронність_Promise.race"><font face="consolas, Liberation Mono, courier, monospace">Асинхронність <code>Promise.race</code></font></h3>

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

<pre class="brush: js">// ми передаємо в якості аргументу масив вже вирішених промісів,
// щоб запустити 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 { &lt;state&gt;: "pending" }
// тепер стек порожній
// Promise { &lt;state&gt;: "fulfilled", &lt;value&gt;: 33 }</pre>

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

<pre class="brush: js">var foreverPendingPromise = Promise.race([]);
console.log(foreverPendingPromise);
setTimeout(function(){
    console.log('тепер стек порожній');
    console.log(foreverPendingPromise);
});

// порядок виведення:
// Promise { &lt;state&gt;: "pending" }
// тепер стек порожній
// Promise { &lt;state&gt;: "pending" }
</pre>

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

<pre class="brush: js">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 { &lt;state&gt;: "pending" }
// Promise { &lt;state&gt;: "pending" }
// тепер стек порожній
// Promise { &lt;state&gt;: "fulfilled", &lt;value&gt;: 666 }
// Promise { &lt;state&gt;: "fulfilled", &lt;value&gt;: "не проміс" }
</pre>

<h3 id="Використання_Promise.race_–_приклади_з_setTimeout">Використання <code>Promise.race</code> – приклади з <a href="/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout"><code>setTimeout</code></a></h3>

<pre class="brush: js">var p1 = new Promise(function(resolve, reject) {
    setTimeout(() =&gt; resolve('один'), 500);
});
var p2 = new Promise(function(resolve, reject) {
    setTimeout(() =&gt; resolve('два'), 100);
});

Promise.race([p1, p2])
.then(function(value) {
  console.log(value); // "два"
  // Обидва вирішуються, але p2 швидший
});

var p3 = new Promise(function(resolve, reject) {
    setTimeout(() =&gt; resolve('три'), 100);
});
var p4 = new Promise(function(resolve, reject) {
    setTimeout(() =&gt; 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(() =&gt; resolve("п'ять"), 500);
});
var p6 = new Promise(function(resolve, reject) {
    setTimeout(() =&gt; reject(new Error('шість')), 100);
});

Promise.race([p5, p6])
.then(function(value) {
  // Не викликається
}, function(reason) {
  console.log(reason); // "шість"
  // p6 швидший, тому він відхиляється
});</pre>

<h2 id="Специфікації">Специфікації</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Специфікація</th>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>

<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>

<p>{{Compat("javascript.builtins.Promise.race")}}</p>

<h2 id="Див._також">Див. також</h2>

<ul>
 <li>{{jsxref("Promise")}}</li>
 <li>{{jsxref("Promise.all()")}}</li>
</ul>