javascript - 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 乘
解决方案
您要么使用回调,要么使用 Promises。当您使用await Player.findOne({ ... }, (err, player) => { ...})
.
您应该将该行更新为const player = await Player.findOne({ ... })
. 另外,正如 Rifat 在评论中建议的那样,使用for ...of
循环来保证 Promise 正常工作。
推荐阅读
- python - 用于计算学生平均测验成绩的 Python 程序
- reactjs - Material-UI 中的 Container 与 Grid 容器有什么不同?
- python - 我应该对此模型进行哪些更改以实现更高的精度
- jenkins-pipeline - 如何从节点块脚本化管道调用函数
- javascript - 将 HSLA 颜色与白色混合并使用 Chroma.js 转换为非 alpha HSL
- javascript - 目录 - 为滚动问题制作动画并为滚动位置添加额外的填充?
- pycharm - 启动 PyCharm 时出错:无法创建 JVM
- python - L = a^nb^n 的确定性下推自动机 | n >=0) Python 程序
- javascript - 如何使用反应备忘录
- powershell - Powershell 导入 CSV