diff options
Diffstat (limited to 'files/uk/web/javascript/reference/operators/await')
-rw-r--r-- | files/uk/web/javascript/reference/operators/await/index.html | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/operators/await/index.html b/files/uk/web/javascript/reference/operators/await/index.html new file mode 100644 index 0000000000..ed8041347d --- /dev/null +++ b/files/uk/web/javascript/reference/operators/await/index.html @@ -0,0 +1,126 @@ +--- +title: await +slug: Web/JavaScript/Reference/Operators/await +tags: + - JavaScript + - Оператор + - Функція +translation_of: Web/JavaScript/Reference/Operators/await +--- +<div>{{jsSidebar("Operators")}}</div> + +<p>Оператор <code>await</code> використовується для очікування на {{jsxref("Promise","проміс")}}. Він може використовуватись лише всередині {{jsxref("Statements/async_function", "асинхронної функції")}}.</p> + +<h2 id="Синтаксис">Синтаксис</h2> + +<pre class="syntaxbox">[<em>rv</em>] = await <em>expression</em>;</pre> + +<dl> + <dt><code>expression</code></dt> + <dd>{{jsxref("Promise","Проміс")}} чи будь-яке інше значення, якого треба дочекатись.</dd> + <dt><code>rv</code></dt> + <dd> + <p>Повертає значення виконаного проміса, або саме значення, якщо це не об'єкт <code>Promise</code>.</p> + </dd> +</dl> + +<h2 id="Опис">Опис</h2> + +<p>Вираз <code>await</code> спричиняє призупинення виконання асинхронної функції до встановлення об'єкта <code>Promise</code> (проміс) (тобто, до його вирішення або відхилення), а також відновлює виконання асинхронної функції після його завершення. Після відновлення, значенням виразу <code>await</code> є значення виконаного проміса.</p> + +<p>Якщо проміс відхилено, вираз <code>await</code> викидає значення відхилення.</p> + +<p>Якщо значення <em>виразу</em>, що стоїть після оператора <code>await</code>, не є об'єктом <code>Promise</code>, воно перетворюється на <a href="/uk/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve">вирішений проміс</a>.</p> + +<p>Оператор <code>await</code> може розбивати хід виконання, дозволяючи коду, що викликав функцію з <code>await</code>, відновити виконання ще до того, як буде продовжене відкладене виконання функції з <code>await</code>. Після того, як <code>await</code> відкладає продовження своєї функції, якщо це перший оператор <code>await</code>, що виконується функцією, негайне виконання також продовжується поверненням у код, що викликав функцію, проміса у стані очікування для завершення виконання функції з <code>await</code> та для відновлення виконання коду, що її викликав.</p> + +<h2 id="Приклади">Приклади</h2> + +<p>Якщо у вираз <code>await</code> був переданий проміс, то вираз чекає на виконання проміса та повертає значення, що є результатом виконання.</p> + +<pre class="brush: js">function resolveAfter2Seconds(x) { + return new Promise(resolve => { + setTimeout(() => { + resolve(x); + }, 2000); + }); +} + +async function f1() { + var x = await resolveAfter2Seconds(10); + console.log(x); // 10 +} + +f1(); +</pre> + +<p>{{jsxref("Global_Objects/Promise/then", "Промісоподібні об'єкти")}} виконуватимуться так само.</p> + +<pre class="brush: js">async function f2() { + const thenable = { + then: function(resolve, _reject) { + resolve('вирішений!') + } + }; + console.log(await thenable); // вирішений! +} + +f2();</pre> + +<p>Якщо значенням є не проміс, він перетворює його на вирішений проміс та чекає на нього.</p> + +<pre class="brush: js">async function f3() { + var y = await 20; + console.log(y); // 20 +} + +f3();</pre> + +<p>Якщо проміс відхилено, викидається значення відхилення.</p> + +<pre class="brush: js">async function f4() { + try { + var z = await Promise.reject(30); + } catch(e) { + console.log(e); // 30 + } +} + +f4();</pre> + +<p>Обробити відхилений проміс без блока try.</p> + +<pre class="brush: js">var response = await promisedFunction().catch((err) => { console.log(err); }); +// якщо проміс відхилено, значенням response буде undefined +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Специфікація</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-async-function-definitions', 'async functions')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + +<div> + + +<p>{{Compat("javascript.operators.await")}}</p> +</div> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Statements/async_function", "async function")}}</li> + <li>{{jsxref("Operators/async_function", "вираз async function")}}</li> + <li>Об'єкт {{jsxref("AsyncFunction")}}</li> +</ul> |