Получить изменённую переменную в функции

Использовал js и vue.js (и ещё api но вопрос не про неё)

this.moves = '';
  for (let i = 0; i in response.moves; i++){
  P.getMoveByName(response.moves[i].move.name).then(this.moves, function (response) {
    this.moves = this.moves + 'текст;
  });
  this.moves
}

нужно после

P.getMoveByName(response.moves[i].move.name).then(this.moves, function (response) {
  this.moves = this.moves + 'текст;
});

получить this.moves.

this - т.к это vue.js


Ответы (1 шт):

Автор решения: letUser

давайте по порядку.

зачем Вы используете for...in? Это устарвшая практика. Лучше использовать for...of для перебора массива (а у Вас 'moves' это 100% массив).

this.moves = '';
  for (const moves of response.moves){
P.getMoveByName(moves.move.name)

далее вам нужно разобраться с асинхронным кодом: Во-первых, по лучшим практикам не стоит вставлять асинхронный код в циклы. В Вашем случае предлагаю сначала подгружать нужные данные в виде обширного массива и далее распределять их по приложению. Использовав подобную архитектуру у Вас пропадает и ошибка связанная с вышеперечисленным кодом. Во-вторых, если Вы все же настаиваете на своём решении, или же нет возможности подгрузить массив данных в состояния приложения при создании компонента, то попробуйте следующее:

P.getMoveByName(response.moves[i].move.name).then((res, rej) => {
  if (res) this.moves.push(res + 'текст');
else if (rej) console.log('Ошибка получения данных массива фильмов');
});
→ Ссылка