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

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]['סטטוס'];
    });

}

我可能不知道有一个非常简单的解决方案。

最佳答案

这最容易用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 );
    });

}

09-28 09:37