Как написать нативный асинхронный код запроса https для Nodejs - PullRequest
0 голосов
/ 22 января 2019

Я скопировал очень хороший код из https://www.tomas -dvorak.cz / posts / nodejs-запрос-без-зависимостей / , чтобы сделать запрос http в nodejs с использованием собственных модулей.

Я хочу иметь возможность использовать значение 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 голосов
/ 22 января 2019

Вы можете настроить обратный вызов и получить доступ к своим данным в этом обратном вызове, этот шаблон должен быть достаточно простым в использовании.

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 / await (это может быть более интуитивно понятно!):

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

testAwait();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...