簡體   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