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

时间:2019-02-17 04:02:33

标签: javascript node.js promise async-await

运行下面的代码后,在console.log中未定义。

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

控制台输出为:getData():未定义

有人可以发现我的问题吗?

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();

1 个答案:

答案 0 :(得分:3)

您可以将await视为“解开”承诺。目前,您的getData未返回Promise,因此没有可“解包”的内容。尽管您在函数内执行return 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();