Результат совершенной транзакции Sequelize "неопределен" - PullRequest
0 голосов
/ 02 апреля 2020

Я использую транзакцию Sequelize, которая успешно возвращается, однако результат не определен. Как указано в документации:

.then(function (result) {
  // Transaction has been committed
  // result is whatever the result of the promise chain returned to the transaction callback

Результат должен содержать вещи!

Мой код успешно работает и обновляет базу данных, входит в блок .then, но результат регистрируется как "неопределенный" .

return sequelize.transaction(t => {
        return createUser(body, {transaction: t})
        .then(user => {
            if (user != null) {
                return createSetup({"user_id" : user.dataValues.id}, {transaction: t})
                .then(setup => {
                    console.log("setup was created")
                })
                .catch(err => {
                    throw new Error("the setup key was not created successfully... reverting transaction 2")
                })
            }
            else {
                throw new Error("no return value from creating user");
            }
        })
        .catch(err => {
            throw new Error("Failed to create user")
        })
    })
    .then(result => {
        console.log(result) //this returns undefined
        res.status(200).send({
            success: true,
            message: "The user was successfully created.",
        })
    })
    .catch(error => {
        console.log("error")
        res.status(400).send({
            success: false,
            message: error
        })
    })
})

Мне очень нужен результат объекта user, но независимо от того, что я делаю, он остается неопределенным. Я пытался с и без возврата на мои последующие функции в рамках транзакции.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Я предполагал, что

return createUser(body, {transaction: t})

будет "результатом цепочки обещаний, возвращенной к обратному вызову транзакции

Однако мне нужно было также вернуть объект пользователя, чтобы получить его в result

return sequelize.transaction(t => {
        return createUser(body, {transaction: t})
        .then(user => {
            if (user != null) {
                return createSetup({"user_id" : user.dataValues.id}, {transaction: t})
                .then(setup => {
                    //this line is necessary to get the value in the result of the transaction
                    return user, setup
                })
0 голосов
/ 02 апреля 2020

Попробуйте это

.then(setup => {
                    return { user, setup }
                })
...