diff options
| author | Ryan Johnson <rjohnson@mozilla.com> | 2021-04-29 16:16:42 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-29 16:16:42 -0700 |
| commit | 95aca4b4d8fa62815d4bd412fff1a364f842814a (patch) | |
| tree | 5e57661720fe9058d5c7db637e764800b50f9060 /files/uk/web/javascript/reference/statements/for-await...of | |
| parent | ee3b1c87e3c8e72ca130943eed260ad642246581 (diff) | |
| download | translated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.tar.gz translated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.tar.bz2 translated-content-95aca4b4d8fa62815d4bd412fff1a364f842814a.zip | |
remove retired locales (#699)
Diffstat (limited to 'files/uk/web/javascript/reference/statements/for-await...of')
| -rw-r--r-- | files/uk/web/javascript/reference/statements/for-await...of/index.html | 253 |
1 files changed, 0 insertions, 253 deletions
diff --git a/files/uk/web/javascript/reference/statements/for-await...of/index.html b/files/uk/web/javascript/reference/statements/for-await...of/index.html deleted file mode 100644 index 9c0440c346..0000000000 --- a/files/uk/web/javascript/reference/statements/for-await...of/index.html +++ /dev/null @@ -1,253 +0,0 @@ ---- -title: for await...of -slug: Web/JavaScript/Reference/Statements/for-await...of -tags: - - JavaScript - - await - - Інструкція - - асинхронний - - перебір -translation_of: Web/JavaScript/Reference/Statements/for-await...of ---- -<div>{{jsSidebar("Statements")}}</div> - -<p><strong>Інструкція</strong> <strong><code>for await...of</code> </strong>створює цикл, що перебирає як асинхронні ітерабельні об'єкти, так і синхронні ітерабельні об'єкти, в тому числі вбудовані {{jsxref("String")}}, {{jsxref("Array")}}, подібні до масивів об'єкти (наприклад, {{jsxref("Functions/arguments", "arguments")}} чи {{DOMxRef("NodeList")}}), {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, а також визначені користувачем асинхронні/синхронні ітерабельні об'єкти. Вона викликає користувацький хук до ітерацій з командами, що виконуватимуться для значення кожної окремої властивості об'єкта. Як і оператор {{jsxref("Operators/await", "await")}}, інструкція може використовуватись лише всередині {{jsxref("Statements/async_function", "асинхронної функції")}}.</p> - -<div class="blockIndicator note"> -<p><code>for await...of</code> не працює з асинхронними ітераторами, які не є асинхронними ітерабельними об'єктами.</p> -</div> - - - -<h2 id="Синтаксис">Синтаксис</h2> - -<pre class="syntaxbox">for await (<var>variable</var> of <var>iterable</var>) { - <var>statement</var> -} -</pre> - -<dl> - <dt><code><var>variable</var></code></dt> - <dd>На кожній ітерації значення іншої властивості присвоюється змінній <code><var>variable</var></code>. Змінна <code><var>variable</var></code> може бути оголошена через <code>const</code>, <code>let</code> або <code>var</code>.</dd> - <dt><code><var>iterable</var></code></dt> - <dd>Об'єкт, чиї ітерабельні властивості перебираються.</dd> -</dl> - -<h2 id="Приклади">Приклади</h2> - -<h3 id="Перебір_асинхронних_ітерабельних_обєктів">Перебір асинхронних ітерабельних об'єктів</h3> - -<p>Ви також можете перебирати об'єкт, який явно реалізує протокол асинхронного ітерабельного об'єкта:</p> - -<pre class="brush:js">const asyncIterable = { - [Symbol.asyncIterator]() { - return { - i: 0, - next() { - if (this.i < 3) { - return Promise.resolve({ value: this.i++, done: false }); - } - - return Promise.resolve({ done: true }); - } - }; - } -}; - -(async function() { - for await (let num of asyncIterable) { - console.log(num); - } -})(); - -// 0 -// 1 -// 2 -</pre> - -<h3 id="Перебір_асинхронних_генераторів">Перебір асинхронних генераторів</h3> - -<p>Оскільки значення, що повертають асинхронні генератори, відповідають протоколу асинхронного ітерабельного об'єкта, їх можна перебирати циклом <code>for await...of</code>.</p> - -<pre class="brush: js">async function* asyncGenerator() { - let i = 0; - while (i < 3) { - yield i++; - } -} - -(async function() { - for await (let num of asyncGenerator()) { - console.log(num); - } -})(); -// 0 -// 1 -// 2</pre> - -<p>Для більш конкретного прикладу перебору асинхронного генератора за допомогою <code>for await...of</code>, розгляньте перебір даних з API.</p> - -<p>Цей приклад спочатку створює асинхронний ітерабельний об'єкт для потоку даних, а далі використовує його, щоб дізнатись розмір відповіді від API.</p> - -<pre class="brush: js">async function* streamAsyncIterable(stream) { - const reader = stream.getReader(); - try { - while (true) { - const { done, value } = await reader.read(); - if (done) { - return; - } - yield value; - } - } finally { - reader.releaseLock(); - } -} -// Отримує дані з URL та обчислює розмір відповіді за допомогою -// асинхронного генератора. -async function getResponseSize(url) { - const response = await fetch(url); - // Міститиме розмір відповіді, у байтах. - let responseSize = 0; - // Цикл for-await-of. Асинхронно перебирає кожну частку відповіді. - for await (const chunk of streamAsyncIterable(response.body)) { - // Збільшує загальну довжину відповіді. - responseSize += chunk.length; - } - - console.log(`Розмір відповіді: ${responseSize} байтів`); - // очікуваний результат: "Розмір відповіді: 1071472 байтів" - return responseSize; -} -getResponseSize('https://jsonplaceholder.typicode.com/photos');</pre> - -<h3 id="Перебір_синхронних_ітерабельних_обєктів_та_генераторів">Перебір синхронних ітерабельних об'єктів та генераторів</h3> - -<p>Цикл <code>for await...of</code> також споживає синхронні ітерабельні об'єкти та генератори. У цьому випадку він внутрішньо чекає на видані значення перед тим, як присвоювати їх керівній змінній циклу.</p> - -<pre class="brush: js">function* generator() { - yield 0; - yield 1; - yield Promise.resolve(2); - yield Promise.resolve(3); - yield 4; -} - -(async function() { - for await (let num of generator()) { - console.log(num); - } -})(); -// 0 -// 1 -// 2 -// 3 -// 4 - -// порівняйте з циклом for-of: - -for (let numOrPromise of generator()) { - console.log(numOrPromise); -} -// 0 -// 1 -// Promise { 2 } -// Promise { 3 } -// 4 -</pre> - -<div></div> - -<div class="blockIndicator note"> -<p><strong>Заувага</strong>: остерігайтеся видавати відхилені проміси з синхронного генератора. У цьому випадку <code>for await...of</code> викидає виняток при споживанні відхиленого проміса та НЕ ВИКЛИКАЄ блоки <code>finally</code> всередині цього генератора. Це може бути небажаним, якщо вам треба звільнити певні виділені ресурси за допомогою <code>try/finally</code>.</p> -</div> - -<pre class="brush: js">function* generatorWithRejectedPromises() { - try { - yield 0; - yield 1; - yield Promise.resolve(2); - yield Promise.reject(3); - yield 4; - throw 5; - } finally { - console.log('викликано finally') - } -} - -(async function() { - try { - for await (let num of generatorWithRejectedPromises()) { - console.log(num); - } - } catch (e) { - console.log('перехоплено', e) - } -})(); -// 0 -// 1 -// 2 -// перехоплено 3 - -// порівняйте з циклом for-of: - -try { - for (let numOrPromise of generatorWithRejectedPromises()) { - console.log(numOrPromise); - } -} catch (e) { - console.log('перехоплено', e) -} -// 0 -// 1 -// Promise { 2 } -// Promise { <rejected> 3 } -// 4 -// перехоплено 5 -// викликано finally -</pre> - -<p>Для того, щоб блоки <code>finally</code> у синхронному генераторі завжди викликались, використовуйте належну форму циклу, <code>for await...of</code> для асинхронних генераторів та <code>for...of</code> для синхронних, та чекайте на видані проміси явно всередині циклу.</p> - -<pre class="brush: js">(async function() { - try { - for (let numOrPromise of generatorWithRejectedPromises()) { - console.log(await numOrPromise); - } - } catch (e) { - console.log('перехоплено', e) - } -})() -// 0 -// 1 -// 2 -// перехоплено 3 -// викликано finally</pre> - -<h2 id="Специфікації">Специфікації</h2> - -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Специфікація</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'ECMAScript Language: The for-in, for-of, and for-await-of Statements')}}</td> - </tr> - </tbody> -</table> - -<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> - - - -<p>{{Compat("javascript.statements.for_await_of")}}</p> - -<h2 id="Див._також">Див. також</h2> - -<ul> - <li>{{jsxref("Global_Objects/Symbol/asyncIterator", "Symbol.asyncIterator")}}</li> - <li>{{jsxref("Statements/for...of", "for...of")}}</li> -</ul> |
