Как вызвать обратный вызов только тогда, когда все функции выполнены - PullRequest
2 голосов
/ 03 июля 2019

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

function bigFunction(data, callback) {
    //only after they will finish ||
    func1(); //  <================||
    func2(); //  <================||
    //call callback
    callback();
}

Реальный код:

function getStarsStatus(star, callback) {

    require('./Bezeq').GetStarStatus(star, function(status) {
        statuses['Bezeq'] = status;
    });

    require('./Hot').GetStarStatus(star, function(status){
    statuses['Hot'] = status[0][0]['סטטוס'];
    });

}

Возможно, есть очень простое решение, которого я просто не знаю.
Спасибо!

1 Ответ

1 голос
/ 03 июля 2019

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

function getStarsStatus(star, callback) {

    const numStatusesTotal = 2;
    let numStatusesFetched = 0;

    require('./Bezeq').GetStarStatus(star, function(status) {
        statuses['Bezeq'] = status;
        if ( ++numStatusesFetched === numStatusesTotal )
          callback( statuses );
    });

    require('./Hot').GetStarStatus(star, function(status){
        statuses['Hot'] = status[0][0]['סטטוס'];
        if ( ++numStatusesFetched === numStatusesTotal )
          callback( statuses );
    });

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