Node.js Sequalize事务回滚不适用于多个项目(节点js)

Node.js Sequalize事务回滚不适用于多个项目(节点js),node.js,transactions,sequelize.js,Node.js,Transactions,Sequelize.js,我有一个对象数组,我希望sequelize中有一个原子事务 updateCreatorDb(resultObj) { return Promise.map(resultObj.rows, function (result: any) { return sequelize.transaction({ autocommit: false }).then(function (t) { return postgresService.updateByIdTrans(result.i

我有一个对象数组,我希望sequelize中有一个原子事务

updateCreatorDb(resultObj) {
return Promise.map(resultObj.rows, function (result: any) {
    return sequelize.transaction({ autocommit: false }).then(function (t) {
        return postgresService.updateByIdTrans(result.id, "user_transactions",
            { status: "sucess" }, t).then(function () {
                return postgresService.updateByIdTrans(result.to_user, "user",
                    { balance: sequelize.literal('balance+' + result.amount) }, t).then(function (data) {
                         t.commit();
                    }, function (error) {
                         t.rollback();
                    })
            }, function (error) {
                 t.rollback();
            });
    }); 
});
}

updateByDTrans(id:number,model:string,attributes,t:Transaction):承诺{
让承诺=新承诺((解决:功能,拒绝:功能)=>{
logger.info(“更新表”+模型);
返回模型[model].update(属性,{where:{id:id},返回:true},{transaction:t})
。然后((结果)=>{
如果(results.length>0){
info(`Updated Object with id${id}.`);
解析(JSON.stringify(结果[1][0]);
}否则{
info(`id为${id}的对象不存在。`);
解析(JSON.stringify(`id为${id}的对象不存在。`);
}
}).catch((错误:error)=>{
logger.error(错误消息);
拒绝(错误);
});
});
回报承诺;
}

若第二个update语句失败,那个么我想回滚第一个update语句,因为它们使用相同的事务对象,并且在第二个update语句成功之前不会提交
。使用此代码,如果第二个update语句中有错误,则只回滚第二个update语句,并提交第一个update语句。

在您提供的示例中,您在
.map()
方法的每个循环中创建新事务,因此每次
更新
成功时,它都会提交,因此,如果错误发生在
n
循环中,所有
n-1
事务都会提交,更改会保存在数据库中感谢您的回复。但我的问题是,如果出现错误(n-1),则(n-1)应该回滚。我现在才明白。我认为
updatebydtrans
函数源代码在这种情况下对解决您的问题非常有用更新的请看一看
 updateByIdTrans(id: number, model: string, attributes, t:    Transaction): Promise<void> {
   let promise = new Promise<void>((resolve: Function, reject: Function) => {
     logger.info("updating table " + model);
   return models[model].update(attributes, { where: { id: id }, returning: true }, { transaction: t })
          .then((results) => {
            if (results.length > 0) {
              logger.info(`Updated Object with id ${id}.`);
              resolve(JSON.stringify(results[1][0]));
            } else {
              logger.info(`Object with id ${id} does not exist.`);
              resolve(JSON.stringify(`Object with id ${id} does not exist.`));
            }

          }).catch((error: Error) => {
            logger.error(error.message);
            reject(error);
          });
     });

return promise;