将查询随机挂起

时间:2019-09-27 05:19:13

标签: javascript node.js async-await sequelize.js generator

我正在调用一种使用Sequelize更新Postgres模型中某些数据的方法。调用来自异步生成器函数,如下所示:

文件夹结构:

  1. 文件夹1
    • initialCallFile(生成器功能)
    • anotherFileThatCalls(非生成器功能)
  2. 文件夹2
    • updateBotMethodFile

初始通话:

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,但仍然挂起。由于没有错误或超时,因此我不确定如何最好地调试问题。该代码在其他地方调用时按预期工作,因此我很困惑。

任何建议将不胜感激。

0 个答案:

没有答案