代码之家  ›  专栏  ›  技术社区  ›  pigfox

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

  •  0
  • pigfox  · 技术社区  · 5 年前

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

    我试图回报一个已决定的承诺,但它失败了。没有错误。

    控制台输出为: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 回复  |  直到 5 年前
        1
  •  3
  •   Nick Parsons Felix Kling    5 年前

    你可以想到 await getData Promise 所以没有什么可以“打开”的。虽然你知道 return new Promise 在函数中,实际上是返回内部回调函数,而不是外部回调函数 获取数据 作用

    所以,你需要把你的头发包起来 .get 方法,并解析数据:

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