繁体   English   中英

在Sequelize挂钩中使用Promise

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM