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/