对承诺感到困惑。我需要在这里 return 吗?
Confused about promises. Do I need to return here?
所以我最近开始学习 Promises (Bluebird),现在我正在尝试尽可能多地使用它们,但是如果我需要 return promises 在这案例.
这是我制作的 Passport LocalStrategy:
passport.use(new LocalStrategy(function(username, password, done) {
users.get(username) // A
.then(function(user) {
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
bcrypt.compare(password, user.password).then(function(result) { // B
if (result) {
return done(null, user);
}
return done(null, false, { message: 'Incorrect password.' });
});
})
.catch(function(err) {
return done(err);
});
}));
users.get(username)
行 A 使用 pg-promise 库来 return 一个承诺,如果在数据库中找到一个用户,它将解析为一个用户,如果没有,则为 false找到了。
B 行的 bcrypt.compare
使用 bcrypt 检查密码和哈希值是否匹配。它 return 是一个将解析为 true 或 false 的承诺。
代码运行完美,我只是不知道 A 行和 B 行是否应该 return 像这样
return users.get(username) // A
return bcrypt.compare(password, user.password).then(function(result) { // B
代码在有和没有return承诺的情况下都有效。
难道Passport/Node就等着看到return done
?这是否意味着这个函数是同步的,即使它里面的所有东西都是异步的?通常你会 return 一个承诺,然后在它上面使用 .then()
但是因为 LocalStrategy 没有使用 .then()
或 .catch()
我不需要 return 任何东西?非常感谢任何输入。谢谢。
Passport 不支持 Promise,因此您必须在回调中调用 done。您可以 return users.get(username)
但从未使用 return 值(承诺)。不要忘记你可以像下面这样链接承诺:
users.get(username)
.then(function(user) {
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
return bcrypt.compare(password, user.password);
})
.then(function(result) { // B
if (result) {
return done(null, user);
}
return done(null, false, { message: 'Incorrect password.' });
})
.catch(function(err) {
return done(err);
});
所以我最近开始学习 Promises (Bluebird),现在我正在尝试尽可能多地使用它们,但是如果我需要 return promises 在这案例.
这是我制作的 Passport LocalStrategy:
passport.use(new LocalStrategy(function(username, password, done) {
users.get(username) // A
.then(function(user) {
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
bcrypt.compare(password, user.password).then(function(result) { // B
if (result) {
return done(null, user);
}
return done(null, false, { message: 'Incorrect password.' });
});
})
.catch(function(err) {
return done(err);
});
}));
users.get(username)
行 A 使用 pg-promise 库来 return 一个承诺,如果在数据库中找到一个用户,它将解析为一个用户,如果没有,则为 false找到了。
bcrypt.compare
使用 bcrypt 检查密码和哈希值是否匹配。它 return 是一个将解析为 true 或 false 的承诺。
代码运行完美,我只是不知道 A 行和 B 行是否应该 return 像这样
return users.get(username) // A
return bcrypt.compare(password, user.password).then(function(result) { // B
代码在有和没有return承诺的情况下都有效。
难道Passport/Node就等着看到return done
?这是否意味着这个函数是同步的,即使它里面的所有东西都是异步的?通常你会 return 一个承诺,然后在它上面使用 .then()
但是因为 LocalStrategy 没有使用 .then()
或 .catch()
我不需要 return 任何东西?非常感谢任何输入。谢谢。
Passport 不支持 Promise,因此您必须在回调中调用 done。您可以 return users.get(username)
但从未使用 return 值(承诺)。不要忘记你可以像下面这样链接承诺:
users.get(username)
.then(function(user) {
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
return bcrypt.compare(password, user.password);
})
.then(function(result) { // B
if (result) {
return done(null, user);
}
return done(null, false, { message: 'Incorrect password.' });
})
.catch(function(err) {
return done(err);
});