js:如何在循環異步請求的每次返回中添加想要的值


先看一個場景

var arr = ["a","b","c"];
for (var i in arr) {
        $.get("h.html", function (data) {//1
            console.log(data);
            console.log(arr[i]);
            console.log("----");
        });
}
 
我們期望的是

 

然而實際上是

 

如何達到實際目的呢?先給出解決方法,再慢慢解釋

使用閉包,或者簡單說,使用函數,根據作用域,控制好返回回調函數中數據的值

var arr = ["a","b","c"];
    var b = 1000000000;
    for (var i in arr) {
        get(arr[i]);//使用閉包,使得每次請求返回某些想要的數據
    }
    function get(retur) {
        $.get("h.html", function (data) {//2
            console.log("func:"+data);
            console.log("func:"+retur);
            console.log("func:----");
        });
    }
 
下面是詳細解釋
首先清楚一點,異步請求理論上是在正常的js代碼執行完畢之后才發送,所以不難理解為什么上述一直返回的是c,因為代碼都循環結束了,才一起發送的請求
然后我簡單的畫了兩張圖,便於理解

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM