我正在开发一个简单的Discord机器人,并且尝试打印有关某个玩家的一些常规数据。我最近了解了异步/等待,并尝试将其实现到我的代码中。但是,它似乎不起作用,因为当我第一次触发此代码时,它会输出null,但是在后续触发时它将输出正确的数据,这表明我的函数没有等待Promise解析。
async function stats(){
data = await NBA.stats.playerInfo({ PlayerID: curry.playerId });
}
stats();
data = JSON.stringify(data);
console.log(data);
变量数据是在程序顶部声明的全局变量,最初被初始化为null。
答案 0 :(得分:0)
如果我正确理解了您的意图,那么您想要的是异步地将一些数据提取到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);