如何编写原生Node.js异步https请求代码

时间:2019-01-22 12:10:23

标签: node.js promise

我已经从https://www.tomas-dvorak.cz/posts/nodejs-request-without-dependencies/复制了很好的代码,以便使用本机模块在nodejs中发出http请求。

我希望以后可以在脚本中使用data值。

我知道这是新手和异步代码的常见问题,我只是还不了解,并且为获得它而奋斗了数周。

我应付了很多代码,观看了youtube,与人们交谈,这真是难得一见。

const getContent = function(url) {
    return new Promise((resolve, reject) => {
      const https = require('https')
      const request = https.get(url, (response) => {
        // handle http errors
        if (response.statusCode < 200 || response.statusCode > 299) {
           reject(new Error('Failed to load page, status code: ' + response.statusCode));
         }
        // temporary data holder
        const body = [];
        // on every content chunk, push it to the data array
        response.on('data', (chunk) => body.push(chunk));
        // we are done, resolve promise with those joined chunks
        response.on('end', () => resolve(body.join('')));
      });
      // handle connection errors of the request
      request.on('error', (err) => reject(err))
      })
  }

getContent('https://myapi/json')
  .then((data) => console.log(data))
  .catch((err) => console.error(err))

// I want to use the "data" value down here in my script.  I want to do things with the "data" value like JSON.parse(data)

console.log(data) //undefined
let json = JSON.parse(data) //undefined
console.log('after')

我的数据结果是undefined

如何在上面所有代码下方使用data

1 个答案:

答案 0 :(得分:0)

您可以设置一个回调并在此回调中访问数据,此模式应该足够易于使用。

getContent('https://myapi/json')
  .then(useData)
  .catch((err) => console.error(err))

// Use this callback to do what you want with your data!
function useData(data) { 
    console.log(data);
    let json = JSON.parse(data);
}

或使用异步/等待(这可能更直观!):

async function testAwait() {
    let data = await getContent('https://myapi/json');
    console.log("data: ", data);
}

testAwait();