Могу ли я использовать await asyn c внутри функции asyn c? - PullRequest
1 голос
/ 29 мая 2020

Я новичок ie изучаю promises и async / await и хотел бы знать, можно ли изменить этот код:

async function waiting() {
   let a = await new Promise(r => setTimeout(() => r('A'), 1e3))
   let b = await new Promise(r => setTimeout(() => r('B'), 2e3))
   let c = await new Promise(r => setTimeout(() => r('C'), 3e3))
   console.log(a, b, c)
}

waiting()

И использовать что-то вроде этого:

let a = await async () => setTimeout(() => 'A', 1e3)

или аналогичный.

Обновление :

Я также пробовал это:

let a = await (() => setTimeout(() => 'A', 1e3))()

Я хочу добиться того же с помощью сокращенного синтаксиса.

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Короткий ответ: да . Ожидание превращает это в обещание. Вы можете сказать что-то вроде

// not asynchronous; not a promise
function foo() { return 3; }
. . .
async function do_it() {
  const x  = await foo();
}

foo(), по сути, оборачивается чем-то вроде

new Promise( (resolve, reject) => {
  try {
    resolve(foo());
  } catch (err) {
    reject(err);
  }
}

Таким образом, вы можете сказать что-то вроде:

const sleep = ms  => new Promise( resolve => setTimeout( () => resolve(), ms) );

async function waiting() {

   await sleep(1000);
   const a = await computeA();
   await sleep(2000);
   const b = await computeB();
   await sleep(3000);
   const c = await computeC();

   console.log(a, b, c)

}

async / await позволяет express вещей более процедурно выглядеть. Он также передает событие l oop: другие вещи могут продолжать обработку, пока вы ждете.

0 голосов
/ 29 мая 2020

Не с setTimeout, поскольку он ничего не возвращает, но с реальными методами asyn c вы можете использовать Promise.all

Метод Promise.all() возвращает single Promise, который выполняется, когда все обещания, переданные как итерируемые, были выполнены

let [a, b, c] = await Promise.all([methodA(), methodB(), methodC()]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...