Как заставить запрос https.get назначать данные из запроса в переменную вне запроса? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь получить запрос https.get для назначения данных из запроса переменной за пределами запроса. Я также использую топор ios. В запросе https.get он возвращает нужные мне данные в res.on ('end' ... Но я не могу понять, как получить эти данные вне res.on ('end' ... часть запроса. Вот мой код:

require('dotenv').config();
const express = require('express');
const {SERVER_PORT} = process.env;
const https = require('https');
const xml2js = require('xml2js');
const parser = new xml2js.Parser({ attrkey: "ATTR" });

const app = express();

app.use(express.json());

app.post('/api/ecb/forex/stats', async(req, res) => {
    const {base_currency, base_amount, target_currency} = req.body;

    let currencyInfo = https.get("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml", function(res) {
        let data = '';

        res.on('data', async function(stream) {
            data += stream;
        });
        res.on('end', async function(){
            parser.parseString(data, async function(error, result) {
                if(error === null) {
                    return result['gesmes:Envelope'].Cube[0].Cube.forEach(element => {
                            console.log("at",element.Cube); 
                            return element.Cube;  
                        });;
                }
                else {
                    console.log(error);
                }
            });
        });
    });
    console.log(currencyInfo);
})

const port = SERVER_PORT;
app.listen(port, () => console.log(`Port running on port ${port}`));

Мне нужно значение 'element.Cube;' в пределах res.on ('end' ... части запроса https.get для быть назначены на переменную "currencyInfo". Что я делаю не так и как я могу исправить код?

1 Ответ

1 голос
/ 22 февраля 2020

Вы можете изменить свой код на что-то вроде ниже, тогда у вас есть обещание вернуть:

let currencyInfo = await new Promise((resolve, reject) => {
  https.get('https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml', function(res) {
    let data = '';

    res.on('data', async function(stream) {
      data += stream;
    });
    return res.on('end', async function() {
      return parser.parseString(data, async function(error, result) {
        if(error === null) {
           return result['gesmes:Envelope'].Cube[0].Cube.forEach(element => {
             resolve(element.Cube);
          });
        }
        else {
          reject(error);
        }
      });
    });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...