回调函数参数

时间:2017-03-15 20:09:55

标签: javascript node.js

我一直在关注Node.js教程。我总是怀疑数据如何传递给回调函数参数。作为一个例子

 User.addUser(newUser, (err, user) =>{
    if(err){
        res.json({success: false, msg:'Failed to register new user'});
    } else {
        res.json({success: true, msg:'User registered'});
    }
});

和addUser函数定义为,

module.exports.addUser = function(newUser, callback){
    bcrypt.genSalt(10, (err,salt)=>{
        bcrypt.hash(newUser.password, salt, (err, hash) => {
            if(err) throw err;
            newUser.password = hash;
            newUser.save(callback);
        });
    });
}

我不明白错误和用户是如何通过的。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

答案是newUser.save也采用callback参数并传递相同类型的参数。所以你可以直接将回调传递给save。我想user.save看起来像下面这样:

User.prototype.save = function(callback) {
   //do stuff to save the user
   //maybe get an error in the process, or a user record, pass them to the callback
   callback(saveError, userRecord)
}

由于saveaddUser的预期参数相同,因此回调可以直接传递到save

编辑: 但是,如果从bcrypt调用返回一个错误,我建议调用你的回调。因为你已经有一个回调来给出错误,所以抛出没有多大意义。调用者会在回调中遇到错误,所以我建议这样做:

bcrypt.hash(newUser.password, salt, (err, hash) => {
        if(err) {
          callback(err, null)
          return
        }
        ...