Javascript node.js:异步回调值
我很困惑。我很想了解如何将在异步函数中获得的值传递到 我有一个具有基本auth函数的模块。在登录中,我要求用户模型搜索具有给定用户名的用户Javascript node.js:异步回调值,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我很困惑。我很想了解如何将在异步函数中获得的值传递到 我有一个具有基本auth函数的模块。在登录中,我要求用户模型搜索具有给定用户名的用户 login: function(req){ var username = req.body.username, password = req.body.password; user.find(username); } 然后用户模型继续这样做 exports.find = function(username){ consol
login: function(req){
var username = req.body.username,
password = req.body.password;
user.find(username);
}
然后用户模型继续这样做
exports.find = function(username){
console.log(User.find({username: username}, function(error, users){
// I get nice results here. But how can I pass them back.
}));
}
但是如何将该用户对象传递回登录函数?您不能将其传递回(因为函数os asynchronous和
login
在完成时已经返回)。但是您可以将它提前传递给另一个函数。您需要将回调函数传递给该方法。js需要一种非常回调驱动的编程风格
例如:
// in your module
exports.find = function(username, callback){
User.find({username: username}, function(error, users){
callback(error, users);
});
}
// elsewhere... assume you've required the module above as module
module.find(req.params.username, function(err, username) {
console.log(username);
});
所以您不返回值;传入函数,然后接收值(冲洗,重复)
用户类上的登录方法将如下所示:
login: function(req, callback){
var username = req.body.username,
password = req.body.password;
user.find(username, function(err, user) {
// do something to check the password and log the user in
var success = true; // just as an example to demonstrate the next line
callback(success); // the request continues
};
}
您的示例代码令人困惑。我认为您缺少的是
exports.find
函数中的回调函数。但是如果你从登录函数调用它,你会创建无限递归。。。也许你在你的问题中混淆了这一点?在与这个简单的问题争论了这么久之后,我感到困惑。答案是肯定的。虽然大部分答案都在正确的轨道上,但与“程序性”的比较并不相关。同步/异步的区别与代码是过程型、函数型还是其他类型无关;我把它改成了回调驱动。在我的辩护中,现在是悉尼的凌晨5点:)我想指出一点,你必须以不同的方式思考,使用回调而不是返回值。好的,我们就让这一次过去。如果是早上6点,那么…:-)将回调传递给user.find()就是解决方案。如此简单,却又如此重要。非常感谢。好教训。