javascript - Node.js 将数据返回到异步函数失败

标签 javascript node.js promise async-await

运行下面的代码后,我在 console.log 中得到未定义的信息。

我试图返回已解决的 Promise,但失败了。没有错误。

控制台输出为:getData(): undefined

有人能发现我的问题吗?

function getData(){
  var url = 'https://pigfox.com/api/v1/test';
  https.get(url, res => {
      res.setEncoding("utf8");
      res.on('data', data => {
        return new Promise(resolve => {
          resolve(data);
        });
      });
  });   
}

async function go(){
    var rs = await getData();
    console.log('getData(): ' + rs);
}

go();

最佳答案

您可以将 await 视为“拆包” promise 。目前,您的 getData 没有返回 Promise,因此没有任何内容可以“解压”。尽管您确实在函数内返回了 new Promise,但您实际上返回的是内部回调函数,而不是外部 getData 函数。

因此,您需要将 .get 方法包装在 Promise 中,并解析数据:

function getData() { 
  var url = 'https://pigfox.com/api/v1/test';
  return new Promise(resolve => { // getData returns a promise
    https.get(url, res => {
      res.setEncoding("utf8");
      res.on('data', data => {
        resolve(data); // resolve data which can be "unpacked" using await
      });
    });
  });
}

async function go() {
  var rs = await getData(); // now we can "unpack" the promise
  console.log('getData(): ' + rs);
}

go();

关于javascript - Node.js 将数据返回到异步函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54729995/

相关文章:

angular - 如何创建从回调函数返回 promise 的函数

javascript - 在 TypeScript 中使用 Promise.all 将值传递给链中的下一个处理程序

javascript - 使用javascript在shadow root中获取html元素

javascript - 在 JS 模块中公开对象方法时如何管理上下文?

node.js - Azure Blob Node.js 下载 blob 文件

javascript - 为什么这个node-mysql插入会产生一个数组?

javascript - 使用埃拉托色尼筛法检查列表中的素数

javascript - 如何向具有特定类名的所有元素添加影子 dom

javascript - 使用 jquery 使用 .class 标识符从选择列表中选择值错误

javascript - Node.js 未处理的拒绝错误