【问题标题】:How to call callback only when all functions done如何仅在所有功能完成后才调用回调
【发布时间】:2019-11-13 14:04:26
【问题描述】:

我不熟悉这种异步的东西。 我学会了如何使用回调,但现在我需要使用两个函数(异步)并且只有在它们完成后我才想调用我的回调:

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的解决方案是否可以接受?

标签: javascript node.js asynchronous callback


【解决方案1】:

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

}

【讨论】:

  • 谢谢!这正是我所需要的
猜你喜欢
  • 2018-03-09
  • 2018-12-07
  • 1970-01-01
  • 2015-08-05
  • 2012-07-01
  • 2011-05-16
  • 1970-01-01
  • 2012-12-24
相关资源
最近更新 更多