我试图理解并掌握 Promise,但遇到了一个问题,我不确定这是否是正确的做事方式。
我正在使用nodejs,并且有以下内容: 一个数据库和一个模块,我可以在其中对数据库执行某些操作。在某一时刻,我尝试在数据库中创建一个新用户,并在创建用户后在另一个表中为该用户创建具有其他详细信息的另一个条目。
passport.use('local-signup', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
},
function(username, password, done) {
// Before creating the user access Sequlize beforeCreate method so we can encrypt the password
User.beforeCreate(function(req) {
console.log('Encryptying password for user ',req.username)
return encryptPass(req.password)
.then(success => {
req.password = success;
})
.catch(err => {
if (err) console.error(err);
});
});
User.create({
username: username,
password: password
}).then(function(createdUser) {
console.log(createdUser);
UserDetails.create({
id:createdUser.dataValues.id
}).then((data)=>{
console.log(data);
return done(null,createdUser);
}).catch((error)=>{
console.log(error)
return done(error)
})
})
.catch(function(error) {
console.error(error)
return done(`${error.message}.`);
});
}
));
当我遇到这样的事情时,这是使用 promise 的正确方法吗?
如果您需要更多信息,请告诉我,我会尽力使一切变得更加清晰。
最诚挚的问候, 维克多
最佳答案
您可以稍微简化一下,因为您可以删除内部 catch
block ,只需要返回内部 Promise
User.create({
username: username,
password: password
}).then(function (createdUser) {
console.log(createdUser);
return UserDetails.create({
id: createdUser.dataValues.id
}).then((data) => {
console.log(data);
return done(null, createdUser);
})
}).catch(function (error) {
console.error(error);
return done(`${error.message}.`);
});
休息看起来还不错
关于javascript - 这样使用Promise好不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49171771/