我有一個需要請求的JS資源數組。順序必須保持不變,並且響應必須按照我請求它們的順序進行。以下順序請求每個請求,但是我無法捕獲整個請求中的.done()promise回調。
我稱之爲getScripts方法從我的對象:
var depArray = ['file1.js', 'file2.js', 'file3.js'];
getScripts(depArray, global_config.jspath + "/");
這一個迭代$ .Deferred內的陣列()嵌套$。當承諾過......
getScripts : function(arr, path) {
var depMap = [];
$.Deferred(
$.map(arr, function(src) {
$.when(
$.ajax({
url: (path || "") + src + ".js",
success: function (data) {
depMap.push(data);
//return data;
}
}
)
).then(function() {
console.log("request complete...", (path || "") + src + ".js");
return true;
});
})
).done(
function() { alert('completely done!!!!'); }
);
},
警報('完成!!!!')立即被觸發,而不是等待ajax調用執行完成。我需要從方法中返回depMap數組,所以我有一個來自調用的所有響應的映射。
他們的迴應是:
['contents from file1.js', 'contents from file2.js', 'contents from file3.js']
但我永遠不會有一個depMap在年底手頭寬裕。承諾對我仍然有點困惑。任何幫助表示讚賞...
呃,'$ .Deferred'不採取'undefined's作爲它的參數數組? – Bergi