簡體   English   中英

我可以聲明一個非全局變量來存儲異步值嗎?

[英]Can I declare a non-global variable to store asynchronous values?

我有多個JavaScript文件。 我有一個JS函數,在包含多個AJAX調用的負載下運行。 每個AJAX調用都會執行一個回調(並增加一個同步計數器):: myArray.push('somevalue');

這樣我就可以驗證所有(針對此JS文件的)AJAX調用何時完成。

有沒有一種方法可以避免將myArray聲明為全局變量,而又允許異步回調推入此數組呢?

如果要在一定數量的AJAX請求完成后執行一些代碼,請使用$.when

如果僅使用myArray來知道請求何時完成,則可以將其刪除。 如果使用它來存儲每個請求的結果,則可以將其保留在與請求相同的范圍內,然后在done處理程序中對其done訪問。 嘗試這個:

var myArray = [];

var ajax1 = $.ajax({
    url: '/foo/',
    success: function(data) {
        myArray.push(data);
    });
});

var ajax2 = $.ajax({
    url: '/bar/',
    success: function(data) {
        myArray.push(data);
    });
});

$.when(ajax1, ajax2).done(function() {
    // both requests complete
    // myArray will contain the data of both requests at this point...
    for (var i = 0; i < myArray.length; i++) {
        console.log(myArray[i]);
    }
});

聲明一個只能在所需范圍內訪問的變量(例如,在函數內部)。

就像是:

var ajaxCalls = function() {
    var myArray = [];

    var ajax1 = $.ajax({
        url: 'foo.com',
        success: function(data) {
            myArray.push(data);
        });
    });

    // do more AJAX stuff

    $.when(ajax1, ..., ).done(function() {
        // make sure all requests are complete
        // do stuff with the completed array
    });
};

由於JavaScript具有功能范圍,因此myArray變量將不是全局變量,但可以在ajax回調中訪問。 希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM