最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 5浏览 0评论

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

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

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

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

谁能发现我的问题?

function getData(){
  var url = '';
  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视为“解包”承诺。目前你的getData没有返回Promise,所以没有什么可以“解包”。虽然你在函数中执行return new Promise,但实际上你回到内部回调函数,而不是你的外部getData函数。

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

function getData() { 
  var url = 'https://pigfox/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();

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

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

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

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

谁能发现我的问题?

function getData(){
  var url = '';
  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视为“解包”承诺。目前你的getData没有返回Promise,所以没有什么可以“解包”。虽然你在函数中执行return new Promise,但实际上你回到内部回调函数,而不是你的外部getData函数。

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

function getData() { 
  var url = 'https://pigfox/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();

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论