最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

sequelize回滚不promise.all工作

IT培训 admin 6浏览 0评论

sequelize回滚不promise.all工作

sequelize交易不会回滚,当我使用Promise.all与“循环更新”

我把PostgreSQL sequelize和下面的代码工作正常,如果没有错误。

return db.transaction(t => {
 let promises = [];
 promises.push(
  valuesToUpdate.map(item => {
   return db.models.TableToUpdate.update(
    {
     prop1: item.val1,
     prop2: item.val2,
     prop3: item.val3,
     prop4: item.val4
    }
   );
  })
 );

 return Promise.all(promises)
  .then(res => {
   return h.response().code(201);
    })
      .catch(err => {
        console.log(err);
         });
 });

预期结果:当有任何更新的值的误差,sequelize应该回滚该事务中的一切

实际结果:当有任何更新的值的误差,sequelize提交正确的价值观,但不提交错误(如不为空违规等)的值。我不想这样。此外,如果有错误,catch块被调用,但sequelize还是不回退。

回答如下:

需要有在事务级别的catch。下面是我用的结构:

 sequelizeDB.transaction(function (t) {                                  
    ...
    promises.push(newPromise1);
    ...
    promises.push(newPromise2);
    ...
    return Promise.all(promises);
 }).then(function () {
    console.log("SUCCESS!!! (will commit)");
    next(); 
 }).catch(function (err) {
    console.log("FAILURE !!! (will rollback)");
    return next(err);
 });

sequelize回滚不promise.all工作

sequelize交易不会回滚,当我使用Promise.all与“循环更新”

我把PostgreSQL sequelize和下面的代码工作正常,如果没有错误。

return db.transaction(t => {
 let promises = [];
 promises.push(
  valuesToUpdate.map(item => {
   return db.models.TableToUpdate.update(
    {
     prop1: item.val1,
     prop2: item.val2,
     prop3: item.val3,
     prop4: item.val4
    }
   );
  })
 );

 return Promise.all(promises)
  .then(res => {
   return h.response().code(201);
    })
      .catch(err => {
        console.log(err);
         });
 });

预期结果:当有任何更新的值的误差,sequelize应该回滚该事务中的一切

实际结果:当有任何更新的值的误差,sequelize提交正确的价值观,但不提交错误(如不为空违规等)的值。我不想这样。此外,如果有错误,catch块被调用,但sequelize还是不回退。

回答如下:

需要有在事务级别的catch。下面是我用的结构:

 sequelizeDB.transaction(function (t) {                                  
    ...
    promises.push(newPromise1);
    ...
    promises.push(newPromise2);
    ...
    return Promise.all(promises);
 }).then(function () {
    console.log("SUCCESS!!! (will commit)");
    next(); 
 }).catch(function (err) {
    console.log("FAILURE !!! (will rollback)");
    return next(err);
 });

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论