我正在调用一种使用Sequelize更新Postgres模型中某些数据的方法。调用来自异步生成器函数,如下所示:
文件夹结构:
初始通话:
async function* function() {
await storage.updateBot({id: player.id, handsPlayed: 1, isActive: true});
}
updateBot方法:
function updateBot(data) {
return new Promise(async resolve => {
try {
const bot = await Bot.findOne({
where: {
id: data.id,
},
});
if (bot) {
if (data.handsPlayed)
bot.handsPlayed += data.handsPlayed;
if (data.handsWon)
bot.handsWon += data.handsWon;
if (data.totalWinnings)
bot.totalWinnings = data.totalWinnings;
if (data.isActive !== null && data.isActive !== undefined)
bot.isActive = data.isActive;
} else {
logger.log('debug', 'No Bot found with id: %s', data.id);
resolve(true);
}
await bot.save();
resolve(true);
} catch (err) {
logger.log('error', 'Error updating Bot with id: %s', data.id);
resolve(true);
}
});
}
updateBot方法挂在初始的Bot.fineOne查询中。没有引发任何错误,即使5-10分钟后也没有超时。
我也在其他地方调用了updateBot,它们不是从生成器函数中调用的,它们按预期方式工作而不会挂起。但是,我不认为这是生成器函数引起的问题,因为对于一个函数,它是一个完全独立的函数,当我用简单的超时替换查询时,它不会挂起。
我也尝试过直接在生成器函数中调用更新,以及使用yield而不是wait,但仍然挂起。由于没有错误或超时,因此我不确定如何最好地调试问题。该代码在其他地方调用时按预期工作,因此我很困惑。
任何建议将不胜感激。