函数不会等到Promise解决之后

时间:2019-03-26 02:11:51

标签: node.js promise async-await

我正在开发一个简单的Discord机器人,并且尝试打印有关某个玩家的一些常规数据。我最近了解了异步/等待,并尝试将其实现到我的代码中。但是,它似乎不起作用,因为当我第一次触发此代码时,它会输出null,但是在后续触发时它将输出正确的数据,这表明我的函数没有等待Promise解析。

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

 stats();  

 data = JSON.stringify(data);
 console.log(data);

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

1 个答案:

答案 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完成其操作后再登录datastats是异步函数会返回Promise,因此您可以执行以下操作:

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

stats().then(logData);