首页 > 解决方案 > Async/Await 不适用于猫鼬 findOne

问题描述

我正在尝试获取回复变量,但是当调用回调函数时,我得到的只是一个空变量。异步/等待似乎不适用于 findOne 函数,因为我在调用回调后获取值。

function byClanTag(tag, callback) {
  clashApiClient
    .clanByTag(tag)
    .then((response) => {
      var reply = "";
      console.log("1");
      response.memberList.forEach(async (member) => {
        console.log("2");
        await Player.findOne({ playerTAG: member.tag }, (err, player) => {
          if (err) {
            console.log(err);
            callback("Error: ", err);
          }
          if (!player) {
            console.log("3");
            reply = reply + member.name + ": " + "Strike information doesn't exist.\n";
          } else {
            reply = reply + member.name + ": " + player.strikeCount + "Strikes.\n";
          }
        });
      });
      console.log("4");
      callback("```" + response.name + " :   \n\n" + reply + "```");
    })
    .catch(() => callback("Error: Something went wrong while getting data!"));
}

预期的日志输出是 1 (23)*n 乘以 4 但我最终得到 1 (2)*n 乘以 4 (3)*n 乘

标签: javascriptmongooseasync-await

解决方案


您要么使用回调,要么使用 Promises。当您使用await Player.findOne({ ... }, (err, player) => { ...}).

您应该将该行更新为const player = await Player.findOne({ ... }). 另外,正如 Rifat 在评论中建议的那样,使用for ...of循环来保证 Promise 正常工作。


推荐阅读