Значение, прибывающее поздно? «Значение ниже было оценено только сейчас» - PullRequest
0 голосов
/ 24 августа 2018
let currComp = this;
let projects = []
let dataArr = []    


async function getData() {
  let getProject =
    await axios.get('url', {
      auth: {
        username: 'username',
        password: 'pw'
      }
    })

  let projects = await getProject.data.value;
  let arr = []
  let KPIs = []

  projects.map(project => {
    let item = () => axios.get(`url`, {
      auth: {
        username: 'username',
        password: 'pw'
      }
    })

    arr.push(item)
    console.log('arr', arr)
  })

  let results = await axios.all(arr)

  results.map(result => {

    result().then(function(v) {
      KPIs.push(v.data.value)
    })
  })

}

getData();

Я пытаюсь сделать следующее:

  1. получить вызов axios для получения названия проектов.

  2. Используйте эти выбранные имена для вызова нескольких вызовов Axios. Это должно дать мне некоторые данные из этого проекта.

  3. results = await axios.all(arr) содержит функции, которые дают мне ответы на вызов API.

  4. Ответы помещаются в массив KPIs.

  5. Когда я пытаюсь console.log('KPIs', KPIs) в конце, это дает мне

enter image description here

, который кажется пустым массивом, но когда я его открываю,

enter image description here

это действительно имеет значение, которое я хочу.

Проблема в том, что когда я пытаюсь использовать этот массив в своем коде, он дает мне только первый элемент массива.

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

Я хочу использовать полный массив с полным результатом.

Как я могу это исправить?

1 Ответ

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

results = await axios.all(arr) содержит функции, которые дают мне ответы на вызов API.

Да, но это бессмысленно. Вам не нужны функции, которые возвращают обещания для ответов, и нет смысла вызывать axios.all для массива функций или ждать этого.

Вместо этого вам нужно будет создать массив обещаний, а all() и await , которые .

Вам также не нужно использовать then. Вы можете значительно упростить свой код:

async function getData() {
  const getProject = await axios.get('url', {
    auth: {
      username: 'username',
      password: 'pw'
    }
  });

  const projects = getProject.data.value;
  const promises = projects.map(project =>
    axios.get(`url`, {
      auth: {
        username: 'username',
        password: 'pw'
      }
    })
  );

  const results = await axios.all(promises)

  const KPIs = results.map(v => v.data.value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...