Ответ REST API огромен - PullRequest
       8

Ответ REST API огромен

0 голосов
/ 29 августа 2018

Мне необходимо запросить конечную точку API, которая возвращает огромный исторический набор данных за 2015 год.

Однако у меня проблемы с данными.

Когда я использую библиотеку запросов, требуется время, чтобы вернуть набор данных, и документы показывают следующее:

const https = require('https');

var options = {
  "method": "GET",
  "hostname": "rest.coinapi.io",
  "path": "/v1/ohlcv/BITSTAMP_SPOT_BTC_USD/history?period_id=1MIN&time_start=2016-01-01T00:00:00",
  "headers": {'X-CoinAPI-Key': '73034021-0EBC-493D-8A00-E0F138111F41'}
};

var request = https.request(options, function (response) {
  var chunks = [];
  response.on("data", function (chunk) {
    chunks.push(chunk);
  });
});

request.end();

Как создать асинхронную функцию, которая ожидает ответ, а затем записывает полный ответ в файл (с использованием модуля fs)?

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете обернуть все это с Promise и разрешить его, когда вы закончите с вашими данными (что означает .on('end')):

const https = require('https');

const options = {
  "method": "GET",
  "hostname": "rest.coinapi.io",
  "path": "/v1/ohlcv/BITSTAMP_SPOT_BTC_USD/history?period_id=1MIN&time_start=2016-01-01T00:00:00",
  "headers": {'X-CoinAPI-Key': '73034021-0EBC-493D-8A00-E0F138111F41'}
};

const getMyDataAsync = opts => new Promise((resolve, reject) => 
  https.request(opts, response => {
    const chunks = [];
    response.on('data', chunk => chunks.push(chunk));
    response.on('end', () => resolve(chunks));
    response.on('error', err => reject(err));
  })
);

теперь вы можете использовать обещание с then или async:

try {
  const myData = await getMyDataAsync(options);
} catch(e) { /* handle error here */ }

ИЛИ

getMyDataAsync(options)
  .then(myData => { /* your data is right here */ })
  .catch(e => { /* handle error here */ })
...