仅在所有功能完成后如何调用回调

时间:2019-07-02 22:17:32

标签: javascript node.js asynchronous callback

我是这个异步东西的新手。 我学习了如何使用回调,但是现在我需要使用两个函数(异步),只有在它们完成后,我才需要调用回调:

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 个答案:

答案 0 :(得分:1)

这最容易与Promises和Promise.all一起使用,但是如果您的异步函数不返回Promises并且不想对它们进行Promisise,则还可以使用一个计数器并在计数器计数时调用回调达到您期望的数量:

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 );
    });

}