cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Mengapa janji dalam gelung for tidak boleh membaca indeks

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)
    })
  }
} 

Keluaran kedua ialah $remove

Atau beritahu saya cara mendapatkan kunci masuk .then

给我你的怀抱给我你的怀抱2815 hari yang lalu674

membalas semua(5)saya akan balas

  • 仅有的幸福

    仅有的幸福2017-05-19 10:22:43

    Kata kunci: penutupan

    balas
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:22:43

    Ia akan menjadi lebih elegan untuk menggunakan array.map untuk menyelesaikannya

    balas
    0
  • 滿天的星座

    滿天的星座2017-05-19 10:22:43

    Ditutup, cuma gantikan var dengan let in es6

    balas
    0
  • 高洛峰

    高洛峰2017-05-19 10:22:43

    Masalah ini ialah masalah skop pembolehubah gelung biasa. then() 中的回调被调用的时候 key 可能已经循环到最后一个了(也可能是间的某个值),所以里面使用的 key 值是当时的 key 值。这在 ES6 中要可以用 let 代替 var untuk menyelesaikannya (kerana saya nampak anda telah pun menggunakan fungsi anak panah ES6, jadi gunakan ES6 dahulu)

    for (let 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);
            });
        }
    }

    Jika anda ingin menulis ES5, anda boleh menggunakan IIFE untuk mengelak nilai kunci setempat (dilalui melalui parameter, jadi ia tidak akan berubah)

    for (var key in arr) {
        if (arr.hasOwnProperty(key)) {
            (function() {
                console.log("这一次可以输出key" + key);
                this.$http.post("/getPaperListByCIdAndTId", {
                    teacherId: window._const.teacherId
                }).then(function(res_in) {
                    console.log("这一次不能输出key" + key);
                });
            })(key);
        }
    }

    Kaedah penulisan berfungsi yang disyorkan, ia kelihatan lebih mudah, ES6 boleh melakukannya seperti ini

    Object.keys(arr)
        .filter(key => arr.hasOwnProperty(key))
        .forEach(key => {
            console.log(`这一次可以输出 key:${key}`);
            this.$http.post("/getPaperListByCIdAndTId", {
                teacherId: window._const.teacherId
            }).then(res_in => {
                console.log(`这一次不能输出 key 才怪:${key}`);
            });
        });

    ES2017 juga boleh menggunakan async, sintaksnya lebih ringkas

    Object.keys(arr)
        .filter(key => arr.hasOwnProperty(key))
        .forEach(async key => {
            console.log(`这一次可以输出 key:${key}`);
            const res_in = await this.$http.post("/getPaperListByCIdAndTId", {
                teacherId: window._const.teacherId
            });
            console.log(`这一次不能输出 key 才怪:${key}`);
        });

    balas
    0
  • ringa_lee

    ringa_lee2017-05-19 10:22:43

    Saya baru sahaja mengujinya, ia berfungsi, dan anda mesti menggunakan let dan bukannya var, jika tidak, output akan menjadi kunci terakhir

    balas
    0
  • Batalbalas