Понимание асинхронности и ожидания - PullRequest
0 голосов
/ 01 октября 2018

Я все еще новичок в JS, и я пытался понять Async and Await

Я просмотрел эту удивительную статью в Интернете, где они заключили объяснение этого фрагмента кода

function doubleAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x * 2);
    }, 2000);
  });
}

async function addAsync(x) {
  const a = await doubleAfter2Seconds(10);
  const b = await doubleAfter2Seconds(20);
  const c = await doubleAfter2Seconds(30);
  return x + a + b + c;
}


addAsync(10).then((sum) => {
  console.log(sum);
});

Теперь, основываясь на вышеупомянутой статье, я смог сделать какой-то вывод и был бы рад, если бы кто-нибудь мог проверить, правильно это или нет.

Чтобы использовать await, нам нужно вложить его в функцию Async?Async решает проблему цепочки?но тогда так же Promise.all?так что делает асинхронность уникальной / лучшей?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Promise.all ожидает разрешения каждого обещания параллельно, с другой стороны, ожидают, что это будет выполнено одно за другим, что говорит о том, что если у вас много разных функций, каждая из которых сильно зависит от значения предыдущего, которое вы не могли бы использоватьPromise.all в этом сценарии.

0 голосов
/ 01 октября 2018

Чтобы использовать await, нам нужно вложить его в асинхронную функцию?

да, ключевое слово await доступно только в async функциях

Async решает проблему цепочки?

он делает код более простым

, но как и Promise.all?

вы все ещеможет использовать его с await, например:

async function addAsync(x) {
  const [a, b, c] = await Promise.all([
    doubleAfter2Seconds(10), 
    doubleAfter2Seconds(20),  
    doubleAfter2Seconds(30)
  ]);
  return x + a + b + c;
}

, в этом случае все обещания внутри Promise.all будут разрешаться параллельно, и вы получите результаты через 2 секунды вместо 6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...