Невозможно установить свойство 'comment' из неопределенного внутри .then () - PullRequest
0 голосов
/ 01 апреля 2019

Почему obj[i] не определено внутри .then()?

obj = [{'id': 1, 'name': 'john', 'age': '22', 'group': 'grA'}, {'id': 2, 'name': 'mike', 'age': '24', 'group': 'grA'}, {'id': 3, 'name': 'anne', 'age': '25', 'group': 'grB'}]

for (var i = 0; i < obj.length; i++) {
    console.log(obj[i]) // has the right value
    this.commentService.getAllComments(obj[i].id).then((res) => {
        ...
        console.log(obj[i]) // undefined ???
    })
}

Могу ли я решить эту ситуацию, и есть ли объяснение, почему не определено? Спасибо за ваше время!

РЕДАКТИРОВАТЬ: проблема была в том, что я использовал var вместо let. Спасибо!

1 Ответ

0 голосов
/ 01 апреля 2019

Использование var определит переменную на уровне функции упаковки. Поскольку ваш код внутри обещания, то после завершения цикла for выполняется обратный вызов, вы всегда получите i === obj.length. Чтобы избежать этого, вы можете определить локальную переменную области блока, используя ключевое слово let.

for (let i = 0; i < obj.length; i++) { // let instead of var
    console.log(obj[i]) // has the right value
    this.commentService.getAllComments(obj[i].id).then((res) => {
        ...
        console.log(obj[i]) // has the right value
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...