Ответ не меняется вне карты - PullRequest
0 голосов
/ 26 марта 2020

Я разрабатываю приложение для своего университетского проекта. Здесь мне нужно выполнить много запросов, чтобы получить информацию о некоторых биржах Бразилии. После того, как я получу все результаты, мне нужно вернуть их всем пользователю.

router.get("/", async function(req, res, next) {
  const response = {
    exchanges: {
      Msg: { dtTm: timeConverter() },
      SctyHghstIncrLst: []
    }
  };

  var exchanges_to_await = [
    { id: 775, symb: "VALE3", desc: "Vale S.A." },
    { id: 884, symb: "ITUB4", desc: "Itaú Unibanco" },
    { id: 69, symb: "BBDC4", desc: "Banco Bradesco SA Preference Shares" },
    { id: 1978, symb: "BBDC4", desc: "B3 SA - Brasil Bolsa Balcao" },
    { id: 484, symb: "PETR4", desc: "Petroleo Brasileiro SA Petrobras Preference Shares" },
  ];

  try {
    exchanges_to_await.map(async exchange => {
      let await_response = await axios.get(
        `https://api.cotacoes.uol.com/asset/intraday/list/?format=JSON&fields=price,pctChange,date&item=${exchange.id}&`
      );
      var exchange_done = {
        symb: exchange.symb,
        desc: exchange.desc,
        SctyQtn: {
          curPrc: await_response.data.docs[0].price,
          prcFlcn: await_response.data.docs[0].pctChange
        }
      };
      return response["exchanges"]["SctyHghstIncrLst"].push(exchange_done);
    });
  } catch (error) {
    response["exchangesError"] = error;
  }

  res.send(response);

Проблема в том, что ответ не обновляется. Я думаю, что есть простое понятие, но я не знаю, почему оно не работает. Можете ли вы помочь мне найти решение?

Это результат, который я получаю

{
  "exchanges": {
    "Msg": {
      "dtTm": "13:36:25 26/2/2020"
    },
    "SctyHghstIncrLst": []
  }
}

1 Ответ

0 голосов
/ 26 марта 2020

Попробуйте использовать Promise.all ()

let promises = exchanges_to_await.map(async exchange => {
    return axios.get('/https://api.cotacoes.uol.com/asset/intraday/list/?format=JSON&fields=price,pctChange,date&item=${exchange.id}&')
        .then(function (await_response) {
            console.log(await_response);
            var exchange_done = {
                symb: exchange.symb,
                desc: exchange.desc,
                SctyQtn: {
                    curPrc: await_response.data.docs[0].price,
                    prcFlcn: await_response.data.docs[0].pctChange
                }
            };
            response["exchanges"]["SctyHghstIncrLst"].push(exchange_done);
        })
        .catch(function (error) {
            // handle error
            console.log(error);
        })
})
Promise.all(promises).then(function (values) {
    res.send(response);
})
...