Рубрики
Без рубрики

Async / ждать и обещания Объяснил

Операторы Async / aNait облегчают реализацию многих асинхронных обещаний. Они также позволяют инженерам написать более четкий, более краткий, тестичный код. Чтобы понять эту тему, у вас должно быть твердое понимание того, как работают обещания. Базовая синтаксическая функция monterresedPromiseFunc.

async / Ждите Операторы Убедитесь проще реализовать многие асинхронные обещания. Они также позволяют инженерам написать более четкий, более краткий, тестичный код.

Чтобы понять эту тему, вы должны иметь твердое понимание того, как Обещания Работа.

Основной синтаксис

function slowlyResolvedPromiseFunc(string) { 
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(string);
    }, 5000);
  });
}

async function doIt() {
  const myPromise = await slowlyResolvedPromiseFunc("foo");
  console.log(myPromise); // "foo"
}

doIt();

Есть несколько вещей, которые следует отметить:

  • Функция, которая включает в себя ждать Декларация должна включать async оператор. Это скажет переводчика JS, что он должен подождать, пока обещание не будет разрешено и не отклонено.
  • ждать Оператор должен быть встроенным, во время декларации Const.
  • Это работает на Отклонить а также решить Отказ

Вложенные обещания против Async/ждут

Реализация единственного обещания довольно просто. Напротив, привязанные обещания или создание шаблона зависимости могут производить «код спагетти».

Следующие примеры предполагают, что Запрос-обещание Библиотека доступна как RP Отказ

Отрагинские/вложенные обещания

// First Promise
const fooPromise = rp("http://domain.com/foo");

fooPromise.then(resultFoo => {
    // Must wait for "foo" to resolve
    console.log(resultFoo);

    const barPromise = rp("http://domain.com/bar");
    const bazPromise = rp("http://domain.com/baz");

    return Promise.all([barPromise, bazPromise]);
}).then(resultArr => {
    // Handle "bar" and "baz" resolutions here
    console.log(resultArr[0]);
    console.log(resultArr[1]);
});

async и ждать обещаний

// Wrap everything in an async function
async function doItAll() {
    // Grab data from "foo" endpoint, but wait for resolution
    console.log(await rp("http://domain.com/foo"));

    // Concurrently kick off the next two async calls,
    // don't wait for "bar" to kick off "baz"
    const barPromise = rp("http://domain.com/bar");
    const bazPromise = rp("http://domain.com/baz");

    // After both are concurrently kicked off, wait for both
    const barResponse = await barPromise;
    const bazResponse = await bazPromise;

    console.log(barResponse);
    console.log(bazResponse);
}

// Finally, invoke the async function
doItAll().then(() => console.log('Done!'));

Преимущества использования async и ждать должно быть ясно. Этот код более читаемый, модульный и тестичный.

Это справедливо отметить, что, хотя также есть дополнительное чувство параллелизма, основной вычислительный процесс такой же, как предыдущий пример.

Обработка ошибок/отклонения

Базовый блок Try-Catch, обрабатывает отклоненное обещание.

async function errorExample() {
  try {
    const rejectedPromise = await Promise.reject("Oh-oh!");
  } catch (error) {
    console.log(error); // "Uh-oh!"
  }
}

errorExample();

Оригинал: “https://www.freecodecamp.org/news/async-await-and-promises/”