在 Sequelize Hooks 中使用 Promise
Posted
技术标签:
【中文标题】在 Sequelize Hooks 中使用 Promise【英文标题】:Using Promises in Sequelize Hooks 【发布时间】:2014-10-10 06:41:41 【问题描述】:在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;
;
这是我使用 Promise 对用户密码进行哈希处理的函数(不起作用):
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;
);
我无法使用这样的挂钩设置创建用户。我没有收到错误,但没有任何反应——没有用户被创建/保存到数据库中。如果我更改我的_hashPassword(user)
方法以在成功时调用回调函数而不是返回承诺,则会创建用户并成功散列密码:
这是我使用回调的哈希函数(有效):
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);
);
我真的很想为此使用承诺来保持一致。我错过了什么吗?这是一个错误还是文档中有错误?这种行为在我最新的 1.x 和 2.x 版本的 Sequelize 中是相同的。
非常感谢您的帮助! :)
【问题讨论】:
将 Promise 返回给 hook 可能只对 master 有效。 有人确认了吗?我相信我遇到了同样的问题,但在 Master 分支上(虽然稍微落后)。 【参考方案1】:你可以在这里使用 sequelize promises
return sequelize.Promise.reject('Some Error');
【讨论】:
以上是关于在 Sequelize Hooks 中使用 Promise的主要内容,如果未能解决你的问题,请参考以下文章