node.js - 函数不会等到 Promise 得到解决

标签 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);

变量 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 完成其正在执行的操作,然后再记录 datastats 是一个异步函数,返回一个 Promise,所以你可以这样做:

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

stats().then(logData);

关于node.js - 函数不会等到 Promise 得到解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55348886/

相关文章:

javascript - jQuery 链接和级联然后是什么时候

javascript - ES6 类 Promise 链——访问 'this'

node.js - 找不到模块 'unicode/category/So'

javascript - 在浏览器中解压来自 Node.js 的 JSON 数据文件作为静态文件

javascript - Angular : Resolving self-chaining promises

c# - 缺少非捕获 Task.Yield 迫使我使用 Task.Run,​​为什么要遵循它?

c# - C#异步-暂停多个任务,直到完成一个任务

c# - 在 ASP.NET Core 上实现 "Fire and Forget"方法的安全方法

linux - 无法通过端口转发从主机连接到 Vagrant (ubuntu/trusty64)

javascript - foreach 中的 promise