gpt4 book ai didi

javascript - Node.js 回调函数

转载 作者:行者123 更新时间:2023-11-30 12:51:19 26 4
gpt4 key购买 nike

我是 Node.js 平台的新手,我正在尝试尽可能多地学习。在玩过回调之后,有一件事真的让我很困惑:

所以,我有这个功能:

    function registerUser(body, res, UserModel){

var userJSON = {
email : body.email,
password : body.password,
accessToken : null
};
var user = null;
var userAlreadyExists = false;

UserModel.find({}).select('email').exec(function(err, results){
if(err){
console.log('Database error : ' + err);
// send the appropriate response

}else{
for(var index in results){
if(results[index].email == userJSON.email){
userAlreadyExists = true;
break;
}
}
if(userAlreadyExists){
// send the appropriate response
}else{
newAccessToken(UserModel, function(error, token){
if(error != null){
// handle the error
}else{
userJSON.accessToken = token;
user = new UserModel(userJSON);
user.save(function(err){
if(err){
// .. handle the error
}else{
// .. handle the registration
}
});}});}}});}

然后是接受回调的函数:

function newAccessToken(UserModel, callback){

UserModel.find({}).select('email accessToken').exec(function(err, results){
if(err){
callback(err, null);
}else{
// .... bunch of logic for generating the token
callback(null, token);
}

});
}

我希望回调不起作用(可能会抛出错误),因为 useruserJSON 都没有在它的上下文中定义。(好吧,这不完全正确,但由于它是异步执行的 - 一段时间后 - ,我希望回调会丢失它对那些变量的引用,这些变量是在 registerUser 函数中本地定义的)。相反,此示例完美运行,回调函数保留它对 registerUser 函数中定义的那两个变量的引用。有人可以向我解释异步回调和引用是如何工作的,以及该示例为何有效吗?

最佳答案

与回调不同,它们被称为闭包,在 JavaScript 中,范围处理是特殊的。检查此文档:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

关于javascript - Node.js 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com