无法在.then()内部设置未定义的属性“注释”

时间:2019-04-01 14:04:35

标签: javascript angular typescript angular6

为什么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 :(得分:0)

使用var将在包装功能级别定义变量。因为您的代码位于promise内,然后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
    })
}