gpt4 book ai didi

javascript - 完成()与返回完成()

转载 作者:行者123 更新时间:2023-12-03 07:08:27 28 4
gpt4 key购买 nike

我正在阅读 Passport 的文档,我注意到 serialize()deserialize() done()被调用而不被返回。

但是,当使用 passport.use() 设置新策略时在回调函数return done()用来。

这是需要理解的东西还是只是从文档中复制的东西?

http://www.passportjs.org/docs/

从文档:

var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));

最佳答案

return done()将导致函数立即停止执行。这意味着函数内该行之后的任何其他代码行都将被忽略并且不会被评估。
done()前面没有 return但是,不会导致函数停止执行。这意味着将评估函数内该行之后的任何其他代码行。

如果你看看这个passport.use()示例(来自 Passport 文档),您会看到在前三个 return done() 之后有可访问的代码语句,并且您希望函数在 done() 后立即退出第一次调用以确保不评估以下指令:

passport.use(new BasicStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.validPassword(password)) { return done(null, false); }
// The following line is the success case. We do not want to execute it
// if there was an error, a falsy user or a user without a valid
// password. If we removed the return keywords from the previous lines
// of code, the success case would be triggered every time this
// function was called
return done(null, user);
});
}
));

这里我添加了两个可执行代码片段来说明 done() 之间的区别。和`返回完成()。这些片段在其他方面是相同的。
done()没有 return :

const done = console.log

const assessThreatLevel = threatLevel => {
if (threatLevel === 'all good') done('relax :)')
done('launch the missiles!')
}

assessThreatLevel('all good')


`返回完成():

const done = console.log

const assessThreatLevel = threatLevel => {
if (threatLevel === 'all good') return done('relax :)')
done('launch the missiles!')
}

assessThreatLevel('all good')


顺便说一句,我已经开始使用 return done()在大多数情况下为了一致性。据我所知,使用它没有缺点。它可以帮助您避免错误, return语句用作保证和良好的视觉提醒,该函数将在评估该语句后立即退出。

关于javascript - 完成()与返回完成(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59618504/

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