我不是编程新手,但我正在进入Node.JS.我理解阻塞与非阻塞操作。我知道将东西推向非阻塞是Good Thing™。我想要了解的是如何确定,如果我异步推送,我怎样才能确保程序在继续处理/返回之前收集了来自所有不同请求的所有数据?
以下是使用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并将其称为一天吗?
答案 0 :(得分:1)
是的,如果你需要同时做几件事,诺言库可以很好地帮助实现。此外,您不能简单地在此功能的末尾return
。您需要接受回调(除非您的函数返回自己的承诺),然后在完成查询后调用该回调。返回此函数很久就会发生对MySQL的回调。
最后,使用参数化查询来避免SQL注入攻击。