节点 – 如何确保一切都在asynchronous环境中完成

我不是新来的编程,但我正在进入Node.JS. 我了解阻塞与非阻塞操作。 我知道把事情推向非阻塞是Good Thing™。 我想了解的是,如何确定,如果我asynchronous推送东西,如何确保程序在继续处理/返回之前收集来自所有不同请求的所有数据?

以下是使用node-mysql的一些示例代码。 为了争辩,可以是任何东西(Mongo,MySQL,文件读取,http请求等),因为我意识到mysql模块有能力自己平行。

function getUserInfo(userID, myDB){ var users, profile, login; // Get all of the account data myDB.query("SELECT * FROM `users` WHERE `id`='"+userID+"' LIMIT 0,1", function(err, row){ users = JSON.stringify(row); } // Get all of the profile data myDB.query("SELECT * FROM `profile` WHERE `id`='"+userID+"' LIMIT 0,1", function(err, row){ profile = JSON.stringify(row); } // Find their last logged in IP myDB.query("SELECT `ip`,`date` FROM `login` WHERE `userid`='"+userID+"' ORDER BY DESC LIMIT 0,1", function(err, row){ login = JSON.stringify(row); } // Do some other processing here... Once all mysql is done. return(users, profile, login); } 

这里的答案只是将所有这些调用转储到Async.js中,并调用它一天吗?

是的,如果你需要同时做几件事情,一个承诺库可以帮助球很好地。 而且,你不能简单地在这个函数结束时return 。 您需要接受callback(除非您的函数正在返回自己的承诺),然后在完成查询后调用该callback函数。 这个函数返回后,你的callback函数将会发生很长时间。

最后,使用参数化查询来避免SQL注入攻击。