Список данных на экране - PullRequest
1 голос
/ 20 июня 2020

Я хотел бы использовать функцию карты в моей переменной агента, но она недоступна, может ли кто-нибудь сказать мне почему?

код ниже:

axios(config).then(function (response) {
      agents = response.data;
      console.log('agents', agents);
    });
    // (agents.map) map function is not available here
  }

1 Ответ

0 голосов
/ 20 июня 2020

Javascript является асинхронным c по своей природе. Итак, какие бы изменения вы ни делали внутри .then, функция будет отражаться только внутри той же области.

Итак, все, что вы хотите сделать со значением агента, которое вы получаете от вызова API, должно выполняться внутри then только функция.

let agents = [];
axios(config).then(function(response) {
  agents = response.data;
  console.log("agents", agents);
  const mapAgents = agents.map(a => a.someProperty);
  console.log(mapAgents);
  // end of scope for the agent's value, it won't be accessible outside.
});
console.log(agents); // outputs []
// value of agent's won't be accessible here due to async nature. This line will get executed first and then.

asyn c -await

Если вы используете sh для синхронного выполнения какого-либо действия. Вы можете добиться этого, используя async-await, это делает внутреннюю часть функции синхронной, сохраняя выполнение функции как асинхронное.

const getAgents = async function() {
  let agents = []
  const res = await axios(config) // thread will wait till the api call is completed
  agents = res.data
  // perform your action here
}

getAgents(); // this will now become asynchronous

Вы можете узнать больше о природе Javascript asyn c, здесь .

...