синхронное выполнение функции после нескольких асинхронных функций - PullRequest
0 голосов
/ 28 октября 2018

У меня есть 3 асинхронных метода машинописи, которые должны выполняться параллельно, как я показал ниже.Я хочу выполнить последнюю функцию после того, как все 3 из них закончили выполнение.Как я могу сопровождать это.

this.getTimeLecs(prevTimeStartStr , nowTimeStartStr).then((result) => {
  // console.log(result);
  this.previousData = result;
});
this.getTimeLecs(nowTimeStartStr, nextTimeStartStr).then((result) =>{
  this.currentData = result;
});
this.getTimeLecs(nextTimeStartStr , nextTimeEnd ),then(result) => {
  this.nextData = result;
};
finalFunction();

Ответы [ 2 ]

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

С помощью async/await этого можно достичь.

export class AsyncAwaitExample {
  constructor() {
  }
  getTimeLecs(str1, str2) {
    return Promise.resolve(str1 + ":" + str2).then(v => console.log(v));
  }
  async getTimeALL() {
    await Promise.all([
      this.getTimeLecs(10, 20),
      this.getTimeLecs(20, 30),
      this.getTimeLecs(30, 40)]
    );
    this.finalCall();
  }
  finalCall() {
    console.log('final call');
  }
}

let example = new AsyncAwaitExample();
example.getTimeALL();

Здесь

 await Promise.all([
          this.getTimeLecs(10, 20),
          this.getTimeLecs(20, 30),
          this.getTimeLecs(30, 40)]
        );

ждет разрешения всех обещаний и затем вызывает метод finalCall().чтобы проверить, работает ли это или нет, удалите await из приведенного выше кода и посмотрите результаты в консоли.Проверьте Демо , чтобы увидеть его в действии.

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

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

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

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