我正在尝试在 Node 中重构一些 javascript 代码,但在将参数传递给作为其他函数回调的函数时遇到一些问题。例如,这是我的一组回调:
userSchema.pre("save",function(next){
var user = this;
if (!user.isModified(value)) {return next();}
bcrypt.genSalt(10,function(err,salt){
if (err) {return next(err);}
bcrypt.hash(user.password,salt,function(err,hash){
if (err) {return next(err);}
user.password = hash;
next();
});
});
});
我想将回调重构为这样的东西,这样它看起来更干净,并且不需要像 async 或 q 这样的外部库
userSchema.pre("save",function(next){
var user = this;
if (!user.isModified(value)) {return next();}
bcrypt.genSalt(10,saltCallback(user));
});
function saltCallback(user){
return function(err,salt){
bcrypt.hash(user,salt,hashCallback(user));
}
}
function hashCallback(user){
return function(err,hash){
if (err) {return next(err);}
user.password = hash;
next();
}
}
我正在尝试做的问题是,我似乎无法找到一种方法在函数之间传递依赖参数以使此重构发挥作用。
如果有人能给我一些建议,那就太好了
最佳答案
有两种不同的方法可以做到这一点。要么传递 user 和 next。
userSchema.pre("save",function(next){
var user = this;
if (!user.isModified(value)) {return next();}
bcrypt.genSalt(10,saltCallback(user, next));
});
function saltCallback(user, next){
return function(err,salt){
bcrypt.hash(user.password,salt,hashCallback(user, next));
}
}
function hashCallback(user, next){
return function(err,hash){
if (err) {return next(err);}
user.password = hash;
next();
}
}
或者在第一个函数中定义两个函数。
userSchema.pre("save",function(next){
function saltCallback(err,salt){
bcrypt.hash(user.password,salt,hashCallback);
}
function hashCallback(err,hash){
if (err) {return next(err);}
user.password = hash;
next();
}
var user = this;
if (!user.isModified(value)) {return next();}
bcrypt.genSalt(10,saltCallback);
});
关于javascript - 如何重构嵌套回调并将参数传递给 Node 中的每个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30250251/