Node.js Sequelize操作在返回结果时挂起,但在不返回结果时工作

Node.js Sequelize操作在返回结果时挂起,但在不返回结果时工作,node.js,promise,sequelize.js,Node.js,Promise,Sequelize.js,我在Node工作了大约3年,但现在发生在我身上的事情让我发疯 我的项目在过去的6个月里使用了Sequelize,一切都很好 如果我尝试用以下代码更新myModelObject实例,它将按预期工作。(我更改了实际代码,以便以更清晰的方式显示行为) 这将使我的myModelObject在DB中更新,控制台将显示: 承诺解决 1秒钟后 续集更新已解决 但是,当我在更新myModelObject之前添加一个返回时,会发生奇怪的行为: ... .then(parameters => {

我在Node工作了大约3年,但现在发生在我身上的事情让我发疯

我的项目在过去的6个月里使用了Sequelize,一切都很好

如果我尝试用以下代码更新myModelObject实例,它将按预期工作。(我更改了实际代码,以便以更清晰的方式显示行为)

这将使我的myModelObject在DB中更新,控制台将显示:

承诺解决

1秒钟后

续集更新已解决

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

...
.then(parameters => {                                    
   return myModelObject.update({parameters}, { where: { id: myObjectId }})
   .then(() => {
      console.log("Sequelize update resolved !")
   })
})
.then( () => {
   console.log("Promise resolved !")
})
这使我的代码挂起。。更新从未完成,并且会发生超时。我的意思是,如果我想返回,Sequelize更新永远不会解决! 我所有其他的Sequelize代码都工作得很好

任何hep都将非常感谢:)


Node: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事务更新同一对象,但该事务尚未提交

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


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

您想返回什么?promise对象或字符串“Sequelize update resolved!”我只想返回更新的承诺,以便在解决后可以执行操作,但是如果我在“update”之前添加了返回,它将挂起,并且永远不会解决。如果看到您的代码没有使用
返回
,我会大吃一惊!!确切地你在这里描述的是不可能的,因为你展示的代码。在你的例子中,你一定忽略了其他一些事情。我尝试了类似的事情,但没有成功。我也试过你的密码,但也不走运。。当“更新”不恰当地使用承诺时,代码会变得笨拙。创建额外的不必要承诺,加上
返回解决
返回拒绝
什么都不做,请参阅承诺规范。额外的不必要承诺?请再次阅读实际问题和评论部分。我之所以使用return,理想情况下它应该是函数中的最后一条语句。还有,什么也不做?如果您将其记录下来,您将看到“承诺已解决”。带或不带return关键字,因为resolve和reject是回调函数。哇,我遇到了完全相同的问题。这可能为我节省了数小时的调试时间。
.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);
    }
  });
})