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
關鍵字:閉包
用array.map解決會更優雅
閉包了 es6中將var換成let即可
這個問題是比較典型的循環變數作用域的問題。
then()
中的回调被调用的时候key
可能已经循环到最后一个了(也可能是间的某个值),所以里面使用的key
值是当时的key
值。这在 ES6 中要可以用let
代替var
來解(因為我看你已經用 ES6 的箭頭函數,所以先用 ES6)如果要寫 ES5,可以用個 IIFE 來封局部化 key 值(通過參數傳入,所以不會變了)
推薦函數式寫法,看起來比較簡潔,ES6 可以這樣乾
ES2017 還可以用 async,文法更簡潔
剛測試了下,是可以的,而且一定要用let而不是var,否則輸出的都是最後一個key