Как я могу применить транзакцию в сиквелизировать функцию .then с async / await? - PullRequest
0 голосов
/ 15 апреля 2020

В этой функции я хочу применить транзакцию с помощью async / await, я использовал два запроса на обновление для двух разных таблиц, если произошла какая-либо ошибка проверки, хочу откатить транзакцию, я следовал инструкции manual но не может применяться в моем коде. Так как я могу применить транзакцию в функции .then.

В маршрутах -> Пользователь. js

router.post('/update_personal_data', normalUser.updatePersonalData);

В NormalUser. js

const models = require('../../../app/models');
const Sequelize = require('sequelize');
const sequelize = models.sequelize;
const config = require('../../../config/config.json');
const _sendResponse = require('../../../app/helper/global').sendResponse;
const _responseData = require('../../../app/helper/global').responseData;

async updatePersonalData(req, res) {
        let userData = await getUserId(req.headers['access_token']);
        let user_id = userData.mi_user_id;
        var user_address = req.body.useraddress;
        var Pincode = req.body.pincode;
        var Age = req.body.age;
        var Gender = req.body.gender;
        var Marital_status = req.body.marital_status;
        var Father_name = req.body.father_name;
        var Husband_name = req.body.husband_name;
        var First_name = req.body.first_name;
        var Last_name = req.body.last_name;
        var Landline_no = req.body.landline_no;
        var Email = req.body.email;
        var Location = req.body.location;


     const t = await sequelize.transaction();
            await models.mi_user_details.update({
                mi_user_address: user_address,
                mi_pincode: Pincode,
                mi_gender: Gender,
                mi_age: Age,
                mi_marital_status: Marital_status,
                mi_father_name: Father_name,
                mi_husband_name: Husband_name
            }, {
                where: {
                    mi_user_id: user_id
                } 
            },{ t }).then(async function(userdetails) {
                await models.User.update({
                    mi_first_name: First_name,
                    mi_last_name: Last_name,
                    mi_landline_no: Landline_no,
                    mi_catlocyadi_id: Location,
                    mi_email: Email
                }, {
                    where: {
                        mi_user_id: user_id
                    }
                },{ t }).then(async function(userdetails) {
                    _sendResponse(res, 200, "UserDetails Updated Successfully");
                     await t.commit();
                }).catch(async function(err) {
                     await t.rollback();
                    var key_arr = {
                        'validation_error': null
                    }
                    key_arr['validation_error'] = err.errors.map(function(item) {
                        return item["message"];
                    });
                    var data_err = []
                    data_err.push(key_arr)
                    _sendResponse(res, 401, "Something Went Wrong", data_err);
                });
            }).catch(async function(err2) {
                 await t.rollback();
                var key_arr = {
                    'validation_error': null
                }
                key_arr['validation_error'] = err2.errors.map(function(item) {
                    return item["message"];
                });
                var data_err = []
                data_err.push(key_arr)
                _sendResponse(res, 401, "Something Went Wrong", data_err);
            });  
    }

версии:

продолжение: ^ 5.21.3

узел: v12 .14.0

...