Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js将数据返回到异步函数失败_Javascript_Node.js_Promise_Async Await - Fatal编程技术网

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

Javascript Node.js将数据返回到异步函数失败,javascript,node.js,promise,async-await,Javascript,Node.js,Promise,Async Await,运行下面的代码后,我在console.log中得到了未定义的代码 我试图回报一个已决定的承诺,但它失败了。没有错误 控制台输出为:getData():未定义 有人能发现我的问题吗 function getData(){ var url = 'https://pigfox.com/api/v1/test'; https.get(url, res => { res.setEncoding("utf8"); res.on('data', data => {

运行下面的代码后,我在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();

您可以将
wait
视为“打开”承诺。目前,您的
getData
没有返回
Promise
,因此没有需要“解包”的内容。虽然在函数中返回新的Promise,但实际上返回的是内部回调函数,而不是外部的
getData
函数

因此,您需要将
.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();

您可以将
wait
视为“打开”承诺。目前,您的
getData
没有返回
Promise
,因此没有需要“解包”的内容。虽然在函数中返回新的Promise,但实际上返回的是内部回调函数,而不是外部的
getData
函数

因此,您需要将
.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();