Асинхронное ожидание в JavaScript

В JavaScript async/await — это расширение промисов, упрощающее написание промисов. Ключевое слово _async_ перед функцией заставляет функцию всегда возвращать обещание. А ключевое слово _await_ используется внутри асинхронных функций, что заставляет программу ждать, пока промис не разрешится.

Ключевые слова async и await позволяют писать асинхронное поведение на основе обещаний в более чистом стиле, избегая необходимости явно настраивать цепочки обещаний.

Мы используем ключевое слово async с функцией, чтобы обозначить, что функция является асинхронной.

async function test(param1, param2, ...paramN) {
  //statements
}

Здесь,

- test — название функции

- param — параметры, которые передаются в функцию

асинхронная функция:

async function test() {
  console.log("Async");
  return Promise.resolve(1);
}

test();
Output:
Async

Поскольку эта функция возвращает обещание, вы можете использовать метод цепочки then() следующим образом:

async function test() {
  console.log("Async");
  return Promise.resolve(1);
}

test().then(function (output) {
  console.log(output);
});
Output:
Async
1

ключевое слово ожидания:

Ключевое слово await используется внутри асинхронной функции для ожидания асинхронной операции.

let result = await promise;

Использование await приостанавливает асинхронную функцию до тех пор, пока обещание не вернет значение результата.

//a promise
let promise = new Promise(function (resolve, reject) {
  setTimeout(function () {
    resolve("Promise Resolved");
  }, 4000);
});

//async function
async function asyncFunc() {
  //wait until the promise resolves
  let result = await promise;
  console.log(result);
  console.log("hello");
}

//calling the async function
asyncFunc();
Output:
Promise Resolved
hello

- В приведенной выше программе объект Promise создается и разрешается через 4000 миллисекунд.

- Здесь функция asyncFunc() написана с использованием асинхронной функции.

- Следовательно, hello отображается только после того, как значение обещания станет доступным для переменной результата.

- Ключевое слово await ожидает завершения обещания.

Обработка ошибок :

При использовании асинхронной функции вы пишете код асинхронно.
Также вы можете использовать метод catch() для перехвата ошибки.

asyncFunc().catch(
  //catch error and do something
)

Другой способ обработки ошибки — использование блока try/catch.

let promise = new Promise(function (resolve, reject) {
  setTimeout(function () {
    resolve("Promise Resolved");
  }, 4000);
});

async function asyncFunc() {
  try {
    //wait until the promise resolves
    let result = await promise;
    console.log(result);
  } catch (error) {
    console.log(error);
  }
}

asyncFunc();

Преимущества использования асинхронной функции:

- Код более читабелен, чем использование обратного вызова или промиса

- Обработка ошибок проста

- Отладка проще

Подпишитесь на меня на Github:

Гитхаб: https://github.com/jps27cse

Linkedin: https://www.linkedin.com/in/jps27cse