为什么在for循环里的promise,无法读取到index
for (var key in arr) {
if (arr.hasOwnProperty(key)) {
console.log('这一次可以输出key'+key)
this.$http.post('/getPaperListByCIdAndTId', {
teacherId: window._const.teacherId,
}).then((res_in) => {
console.log('这一次不能输出key'+key)
})
}
}
第二次输出的是$remove
或者告诉我怎样在.then里获取到key
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这个问题是比较典型的循环变量作用域的问题。
then()
中的回调被调用的时候key
可能已经循环到最后一个了(也可能是间的某个值),所以里面使用的key
值是当时的key
值。这在 ES6 中要可以用let
代替var
来解决(因为我看你已经用了 ES6 的箭头函数,所以先用 ES6)如果要写 ES5,可以用个 IIFE 来封局部化 key 值(通过参数传入,所以不会变了)
推荐函数式写法,看起来比较简洁,ES6 可以这样干
ES2017 还可以用 async,语法更简洁
刚测试了下,是可以的,而且一定要用let而不是var,否则输出的都是最后一个key
关键字:闭包
用array.map解决会更优雅
闭包了 es6中将var换成let即可