Sequelize Postgres-处理并发请求

时间:2018-11-20 13:36:56

标签: postgresql sequelize.js

并发请求以下代码时,两个事务并发执行。

  1. 第一次更新(软删除列)
  2. 然后插入行

对于由于并发请求而进行的两个事务,将执行前两个更新,然后从两个事务中插入行。该如何解决。

execute(aid, id, d) {
        const _self = this;
        this.db.transaction({autocommit: false, isolationLevel: this.db.Transaction.ISOLATION_LEVELS.SERIALIZABLE}, 
        function (t)
        {
            _self.modal.destroy({
                    where: {
                        aid : aid
                    }
                })
                .then((result) => { 
                    let promises = [];

                    for(let i=0; i<data.length; i++) {
                        promises.push(new Promise(function(resolve, reject) {
                            _self.modal.create({
                                val: d[i].val,
                                id: id,
                            }).then((s) => {
                                let hold = []
                                for(let j=0; j<data[i].hold.length; j++) {
                                    hold.push(_self.addDist(id, aid, s.id, d[i].hold[j]))
                                }
                                Promise.all(hold).then(() => {
                                    resolve();
                                })
                            }).error(error => {
                               // error
                            });
                        }));

                    }
                    return Promise.all(promises);
            }).then(() => {
                  _self.modal.findOne({
                    where: {
                        id: id,
                    },
                    include: [{}]
                }).then(e => {
               //success
                }).catch(error => {
                    console.log(error);
                });
            })

        }).catch(function (error)
        {
            console.log('rolling back as got error ', error);

        });

1 个答案:

答案 0 :(得分:0)

我们需要按如下所述定义交易类型,并且运作良好。 类型:this.db.Transaction.TYPES.EXCLUSIVE