Node.js возвращает данные в асинхронную функцию - PullRequest
0 голосов
/ 17 февраля 2019

После запуска приведенного ниже кода я не определен в console.log.

Я пытаюсь вернуть разрешенное Обещание, но оно не удается.Ошибок нет.

Вывод на консоль: 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();

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете думать о await как о "распаковке" обещания.В данный момент ваш getData не возвращает Promise, и поэтому не нужно ничего "распаковывать".Хотя вы делаете return new 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();
...