[英]Using Promises in Sequelize Hooks
在Sequelize文檔中,我讀到可以在鈎子中使用回調或返回Promise 。 但是,以下代碼對我不起作用–對於最新的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;
};
這是我的功能,它使用諾言(不起作用)對用戶的密碼進行哈希處理:
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中的這種行為是相同的。
非常感謝您的幫助! :)
您可以在此處使用續集承諾
return sequelize.Promise.reject('Some Error');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.