为什么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
。谢谢!
答案 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
})
}