参见下面的代码,如果我要删除所有返回关键字,该函数仍然按预期工作,这导致我与callback()混淆并在与promise混合时返回callback()
有人可以向我解释一下,可以删除以下哪个return
?
是执行过的done()
函数吗?
const localLogin = new LocalStrategy(localOptions, (email, password, done) => {
User.find({ where: { email } }).then(user => {
if (!user) {
return done(null, false);
}
return user.validPassword(password, (err, isMatch) => {
if (err) {
return done(err, false);
}
if (!isMatch) {
return done(null, false);
}
return done(null, user);
});
}).catch(err => {
return done(err, false);
});
});
答案 0 :(得分:1)
这些return
只会破坏user.Find和user.validPassword回调执行。例如,它可以被其他条件替换如下:
const localLogin = new LocalStrategy(localOptions, (email, password, done) => {
User.find({ where: { email } }).then(user => {
if (!user) {
done(null, false);
}
else {
user.validPassword(password, (err, isMatch) => { // return at this point is not needed, because there is nothing to break after this function
if (err) {
done(err, false);
}
else{
if (!isMatch) {
done(null, false);
}
else {
done(null, user);
}
}
});
}
}).catch(err => {
done(err, false);
});
});
如您所见,return
允许摆脱许多其他条件。
return callback()
是一个很好的做法: