gpt4 book ai didi

javascript - 你如何重构嵌套回调并将参数传递给 Node 中的每个函数?

转载 作者:行者123 更新时间:2023-11-29 21:48:27 24 4
gpt4 key购买 nike

我正在尝试重构 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/

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