我正在开发一个简单的不和谐机器人,我正在尝试打印有关某个玩家的一些一般数据。我最近了解了 async/await 并尝试将其实现到我的代码中。然而,它似乎不起作用,因为当我第一次触发此代码时,它会打印 null,但在后续触发时,它将打印正确的数据,表明我的函数没有等待 Promise 解析。
async function stats(){
data = await NBA.stats.playerInfo({ PlayerID: curry.playerId });
}
stats();
data = JSON.stringify(data);
console.log(data);
变量 data 是在我的程序顶部声明的全局变量,最初初始化为 null。
最佳答案
如果我正确理解您的意图,您想要的是将一些数据异步获取到 data
中,然后将其显示在控制台上。
您的 stats
实现正在正确执行提取。但您的问题是,您登录控制台的部分不依赖于已完成的提取。
当您调用已声明为async
的函数时,您是在说您希望它“在后台”执行。解释器不会等待该函数完成执行。
stats(); // begin executing this function
data = JSON.stringify(data); // but don't wait for it to finish before moving on to this line
console.log(data);
显然,这不是您想要的。相反,您需要等待 stats
完成其正在执行的操作,然后再记录 data
。 stats
是一个异步函数,返回一个 Promise,所以你可以这样做:
function logData() {
console.log(JSON.stringify(data));
}
stats().then(logData);
关于node.js - 函数不会等到 Promise 得到解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55348886/