javascript - 等待回调函数完成后再继续

标签 javascript node.js callback

function main(cb) {

  getFirstData(function(ResultsForFirstQuery) {

    // Do something with ResultsForFirstQuery

    // Call getSecondData with param Id I get from ResultsForFirstQuery()
    getSecondData(function(ResultsForFirstQuery[0].Id)) {

      // Now here I need to do something with data data I get from getSeconData(),
      // But the program only calls this AFTER cb(result) in MAIN because of async?
      // How to make the program to wait for this function to finish?

    });

  });

  // THIS GETS CALLED BEFORE getSeconData() is finished
  // but I need to modify data i get from getSeconData before
  // calling this.
  cb(result);
}

funtion getFirstData(cb) {

  var rows;
  var sql = "sql magic here"

  /* Make Sql-query here and return results as rows in cb */

  cb(rows);

}

funtion getSecondData(id, cb) {

  var rows;
  var sql = "sql magic here"

  /* Make Sql-query here and return its results as rows in cb */

  cb(rows);

}

我尝试对代码进行注释,以便读者可以更好地理解问题。函数 main(cb) 是从另一个文件调用的,我在其中使用它的回调来发送邮件,但我将它排除在代码之外,因为我认为它不相关。我还省略了代码块中函数的作用,因为我认为它不相关,但如果有人感兴趣,他们会从多个数据库表生成 XML 文件。这也是一个 Node.js 应用程序。

我遇到的问题是,当我调用 getFirstData() 和 getSecondData() 并获取它们的结果时,在 getFirstData() 结束并生成这两个函数的结果之前,不会执行 getSeconData() 。如何修改该程序以使其等待 getSeconData() 完成后再继续?

最佳答案

正如评论中提到的,您需要在第二个函数的回调中调用cb(result)

function main(cb) {

  getFirstData(function(ResultsForFirstQuery) {
    getSecondData(ResultsForFirstQuery[0].Id, function(ResultsForSecondQuery) {
      // compute away...
      cb(result);
    });
  });

}

关于javascript - 等待回调函数完成后再继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35017798/

相关文章:

javascript - 将 Exel 响应从 JAX-RS 发送到 AngularJS

javascript - Vue JS removeEventListener 不起作用。为什么?

node.js - 如何查明在哪个版本的 Node.js 中发布了某个提交/拉取请求

matlab - 是否可以防止弹出合适的弹出菜单?或者 : How to get a callback by clicking a cell, 返回行和列索引?

javascript - 在 Android 浏览器上,在文本框内输入时整个页面会上下跳动?

node.js - VS Code 自动 npm 构建失败并显示 "npm command not found"

javascript - 如何重用 promise ?

javascript - 如何在Node.js的回调中处理错误

javascript - 如何在 Python 中更新 Bokeh 的 JavaScript 回调中的源?

javascript - Babel 在箭头函数上抛出语法错误