запускать функции ожидания один за другим - PullRequest
0 голосов
/ 22 марта 2019

Существует множество примеров выполнения функций Async/Await.Но только с одним await звонком.

Я не могу найти подходящий пример, чтобы я мог запускать функции ожидания по очереди

async function a() {
   console.log('this is function a');
   // do something
}
async function b() {
   console.log('this is function b');
   // do something
}
async function c() {
   console.log('this is function c');
   // do something
}

async function main() {

  await a();

  await b();

  await c();

}

main();

Тест с приведенным выше кодом (скрыть реальный код), я обнаружил, что это не гарантировано, функция c будет выполняться последней.

Как настроитьэто?

Версия узла:

$ node --version
v10.15.3

1 Ответ

1 голос
/ 22 марта 2019

Как и в комментариях к вашему вопросу, говорите: ваш пример кода всегда будет работать в правильном порядке.

В комментариях вы упоминаете, что если есть сотни строк кода, он не всегда работает таким образом.

Может быть, где-то в этом коде вы используете такие вещи, как setTimeout ()?

Поскольку setTimeout запускается в отдельном контексте выполнения, async / await не будет ждать его завершения. Я обновил ваш пример, чтобы продемонстрировать это.

async function a() {
  console.log('this is function a - 1');
	await getResponse();
  console.log('this is function a - 2');
}

async function b() {
   console.log('this is function b - 1');
   setTimeout(()=>{
   	console.log('this is function b - 2')
   }, 500);
}
async function c() {
   console.log('this is function c');
}

async function main() {
  await a();
  await b();
  await c();
}

function getResponse() {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
    	console.log('setTimeout finished');
      resolve("Response from API. Executed after 5 secs");
    }, 500);
  });
}


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