函数不会等到 Promise 解决

Man*_*er 0 node.js promise async-await

我正在开发一个简单的不和谐机器人,我正在尝试打印有关某个玩家的一些一般数据。我最近了解了 async/await 并尝试将它实现到我的代码中。然而,它似乎不起作用,因为当我第一次触发此代码时,它会打印 null 但在后续触发器中它会打印正确的数据,表明我的函数没有等待 Promise 解析。

async function stats(){
    data = await NBA.stats.playerInfo({ PlayerID: curry.playerId });
}

 stats();  

 data = JSON.stringify(data);
 console.log(data);
Run Code Online (Sandbox Code Playgroud)

变量 data 是在我的程序顶部声明的全局变量,最初初始化为 null。

Aak*_*ain 6

如果我正确理解您的意图,您想要的是异步获取一些数据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);
Run Code Online (Sandbox Code Playgroud)

显然,这不是你想要的。相反,您希望stats在 logging 之前等待完成它正在执行的操作datastats作为一个异步函数返回一个 Promise,所以你可以这样做:

function logData() {
  console.log(JSON.stringify(data));
}

stats().then(logData);
Run Code Online (Sandbox Code Playgroud)