【发布时间】:2021-06-18 19:31:41
【问题描述】:
我正在尝试获取回复变量,但是当调用回调函数时,我得到的只是一个空变量。异步/等待似乎不适用于 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 次
【问题讨论】:
-
你应该使用
for ...of循环而不是forEach循环来保证promise正常工作
标签: javascript mongoose async-await