Skip to content

Commit

Permalink
update(JS): web/javascript/reference/statements/async_function (#920)
Browse files Browse the repository at this point in the history
* update(JS): web/javascript/reference/statements/async_function

* update(JS): web/javascript/reference/statements/async_function
  • Loading branch information
undead404 authored Nov 24, 2022
1 parent 3aae77f commit 68e119c
Showing 1 changed file with 16 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Асинхронна функція
title: async function
slug: Web/JavaScript/Reference/Statements/async_function
tags:
- Example
Expand All @@ -12,7 +12,7 @@ browser-compat: javascript.statements.async_function

{{jsSidebar("Statements")}}

Асинхронна функція - це функція, що оголошена з ключовим словом `async`, і всередині якої дозволене вживання ключового слова `await`. Ключові слова `async` та `await` дають змогу записувати асинхронну (засновану на промісах) поведінку в чистішому стилі, уникаючи необхідності явно задавати ланцюжки промісів.
Оголошення **`async function`** оголошує асинхронну функцію, всередині тіла якої дозволене вживання ключового слова `await`. Ключові слова `async` та `await` дають змогу записувати асинхронну (засновану на промісах) поведінку в чистішому стилі, уникаючи необхідності явно задавати ланцюжки промісів.

Асинхронні функції також можна оголошувати {{jsxref("Operators/async_function", "як вирази", "", 1)}}.

Expand Down Expand Up @@ -127,10 +127,10 @@ function foo() {
```js
async function foo() {
const result1 = await new Promise((resolve) =>
setTimeout(() => resolve('1')),
setTimeout(() => resolve("1"))
);
const result2 = await new Promise((resolve) =>
setTimeout(() => resolve('2')),
setTimeout(() => resolve("2"))
);
}
foo();
Expand All @@ -142,40 +142,42 @@ foo();

```js
async function foo() {
const p1 = new Promise((resolve) => setTimeout(() => resolve('1'), 1000));
const p2 = new Promise((_, reject) => setTimeout(() => reject('2'), 500));
const p1 = new Promise((resolve) => setTimeout(() => resolve("1"), 1000));
const p2 = new Promise((_, reject) => setTimeout(() => reject("2"), 500));
const results = [await p1, await p2]; // Так робити не слід! Натомість краще вжити Promise.all чи Promise.allSettled.
}
foo().catch(() => {}); // Спроба проковтнути всі помилки...
```

Оголошення `async function` [піднімаються](/uk/docs/Glossary/Hoisting) нагору своєї області видимості й можуть викликатися на всьому її протязі.

## Приклади

### Асинхронні функції та порядок виконання

```js
function resolveAfter2Seconds() {
console.log('початок повільного промісу');
console.log("початок повільного промісу");
return new Promise((resolve) => {
setTimeout(() => {
resolve('повільно');
console.log('повільний проміс виконано');
resolve("повільно");
console.log("повільний проміс виконано");
}, 2000);
});
}

function resolveAfter1Second() {
console.log('початок швидкого промісу');
console.log("початок швидкого промісу");
return new Promise((resolve) => {
setTimeout(() => {
resolve('шкидко');
console.log('швидкий проміс виконано');
resolve("шкидко");
console.log("швидкий проміс виконано");
}, 1000);
});
}

async function sequentialStart() {
console.log('==ПОСЛІДОВНИЙ ПОЧАТОК==');
console.log("==ПОСЛІДОВНИЙ ПОЧАТОК==");

// 1. Виконання підходить до цього місця майже миттєво
const slow = await resolveAfter2Seconds();
Expand All @@ -201,7 +203,7 @@ function concurrentPromise() {
(messages) => {
console.log(messages[0]); // повільно
console.log(messages[1]); // швидко
},
}
);
}

Expand Down

0 comments on commit 68e119c

Please sign in to comment.