Sequelize 操作在返回结果时挂起但在不返回时工作

Sequelize operation hanging when returning the result but working when no returning it

我已经使用 Node 工作了大约 3 年,但现在发生在我身上的事情快把我逼疯了。

我的项目在过去 6 个月中使用了 Sequelize,并且一切正常。

如果我尝试使用以下代码更新 myModelObject 实例,它会按预期工作。(我已经更改了实际代码以显示更简洁的行为)

...
.then(parameters => {                                    
   myModelObject.update({parameters}, { where: { id: myObjectId }})
   .then(() => {
      console.log("Sequelize update resolved !")      
   })
})
.then( () => {
   console.log("Promise resolved !")
})

这将使我的 myModelObject 在数据库中更新并且控制台将显示:

Promise resolved !

1 秒后...

Sequelize update resolved !

但是,当我在更新 myModelObject 之前添加 return 时会发生奇怪的行为:

...
.then(parameters => {                                    
   return myModelObject.update({parameters}, { where: { id: myObjectId }})
   .then(() => {
      console.log("Sequelize update resolved !")
   })
})
.then( () => {
   console.log("Promise resolved !")
})

这使我的代码挂起..更新从未完成并且发生超时。我的意思是,如果我想 return 它,Sequelize 更新永远不会被解决! 我所有其他的 Sequelize 代码都运行良好!

任何人都会非常感激:)

节点:12.16.0 ||续集:5.21.6 || PG: 7.18.2

@oriuken,也许你应该试试下面这样的东西。

.then(parameters => {   
  return new Promise(async (resolve, reject) => {
    try {
      await myModelObject.update({parameters}, { where: { id: myObjectId }});
      console.log("Sequelize update resolved !")
      return resolve('Promise resolved')
    }catch(e) {
      return reject(e.message);
    }
  });
})

如果有人感兴趣,我发现了问题!

在调用此方法之前,在代码的另一部分中,Sequelize Transaction 被用于更新同一对象,但事务尚未提交。

显然这会导致我的更新挂起。

为了解决这个问题,我也将这个事务传递给了我的更新调用。另一种解决方法是在调用我的更新之前结束事务。