使用承诺在钩子钩子

在Sequelize文档中我已经读过,你可以使用callback函数或者在你的钩子中返回promise 。 但是,以下代码无法为我工作 – 对于Sequelize的最新1.x和2.x版本。

我设置了用户模型:

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; }; 

这是我的函数,哈希用户的密码,使用承诺(不起作用):

 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; }); } 

我不能创build像这样的钩子的用户。 我没有收到错误,但没有任何反应 – 没有用户被创build/保存到数据库。 如果我更改了我的_hashPassword(user)方法来成功调用callback函数,而不是返回promise,则会创build用户,并且密码已成功散列:

这是我的哈希函数,使用callback(工程):

 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); }); } 

我真的希望用诺言来保持一致。 我错过了什么吗? 这是一个错误还是在文档中有错误? 这种行为在Sequelize的最新版本1.x和2.x中是一样的。

非常感谢您的帮助! 🙂

你可以在这里使用sequelize承诺

 return sequelize.Promise.reject('Some Error');