问一个已经存在的问题,只是我没有完全理解,原问题回调函数里面的callback不是很理解,求解释?
下面是原问题的代码:
//读取用户信息
function User(user) {
this.name = user.name;
this.password = user.password;
this.email = user.email;
};
User.get = function(name, callback) {
//打开数据库
mongodb.open(function(err, db) {
if (err) {
return callback(err); //错误,返回 err 信息
}
//读取 users 集合
db.collection('users', function(err, collection) {
if (err) {
mongodb.close();
return callback(err); //错误,返回 err 信息
}
//查找用户名(name键)值为 name 一个文档
collection.findOne({
name: name
}, function(err, user) {
mongodb.close();
if (err) {
return callback(err); //失败!返回 err 信息
}
callback(null, user); //成功!返回查询的用户信息
});
});
});
};
函数调用
User.get(newUser.name, function(err, user) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
if (user) {
req.flash('error', '用户已存在!');
return res.redirect('/reg'); //返回注册页
}
//如果不存在则新增用户
newUser.save(function(err, user) {
if (err) {
req.flash('error', err);
return res.redirect('/reg'); //注册失败返回主册页
}
req.session.user = newUser; //用户信息存入 session
req.flash('success', '注册成功!');
res.redirect('/'); //注册成功后返回主页
});
});
});
问题1 :User.get = function(name, callback){do something};此处的callback是node内置的吗?假如用户想要自定义带回调函数的函数,就必须使用callback作为自定义函数的参数?
问题2:下面代码中的callback(err);是把err传递给用户自定义的回调函数中了吗?
那么return callback(err);中的return有什么作用,我的印象中return是为了把返回的值给别人使用,那么在这里使用return 就是为了少写一个else吗?还是有其他的用途?
if (err) {
return callback(err); //失败!返回 err 信息
}
callback(null, user);
谢谢你们啦!!希望有人回答我的疑问,如果我哪里理解错了,希望批评指正。
答案1 callback不是内置的,是需要你调用User.get时传入的第二个参数,这个参数是一个function
答案2, return是为了跳出函数,否则if下面的正确分支callback(null, user); 就会被执行了