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 被用于更新同一对象,但事务尚未提交。
显然这会导致我的更新挂起。
为了解决这个问题,我也将这个事务传递给了我的更新调用。另一种解决方法是在调用我的更新之前结束事务。
我已经使用 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 被用于更新同一对象,但事务尚未提交。
显然这会导致我的更新挂起。
为了解决这个问题,我也将这个事务传递给了我的更新调用。另一种解决方法是在调用我的更新之前结束事务。