在Sequelize documentation I've read that you can use callbacks or return promises inside your hooks .然而,以下代码对我不起作用——对于最新的 1.x 和 2.x 版本的 Sequelize。
我设置了用户模型:
var User = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
hooks: {
beforeUpdate: _hashPassword,
beforeCreate: _hashPassword
}
});
return User;
};
这是我使用 promises 对用户密码进行哈希处理的函数(不起作用):
function _hashPassword(user) {
if (!user.getDataValue('password')) {
return Promise.reject();
}
return bcryptGenSalt(10)
.then(function(salt) {
return bcryptHash(user.getDataValue('password'), salt);
})
.then(function(hash) {
user.setDataValue('password', hash);
return user;
});
}
我无法使用这样的 Hook 设置来创建用户。我没有收到错误,但什么也没发生——没有用户被创建/保存到数据库中。如果我更改我的 _hashPassword(user)
方法以在成功时调用回调函数而不是返回 promise ,则会创建用户并成功散列密码:
这是我使用回调的哈希函数(有效):
function _hashPassword(user, cb) {
if (!user.getDataValue('password')) {
return Promise.reject();
}
bcryptGenSalt(10)
.then(function(salt) {
return bcryptHash(user.getDataValue('password'), salt);
})
.then(function(hash) {
user.setDataValue('password', hash);
cb(null, user);
});
}
我真的很想为此使用 promise 来保持一致。我错过了什么吗?这是错误还是文档中有错误?对于我来说,这种行为在最新的 1.x 和 2.x 版本的 Sequelize 中是相同的。
非常感谢您的帮助! :)
最佳答案
你可以在这里使用sequelize promises
return sequelize.Promise.reject('Some Error');
关于javascript - 在 Sequelize Hooks 中使用 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344881/