【发布时间】:2015-12-05 19:58:32
【问题描述】:
我有一组需要请求的 JS 资源。必须保持顺序,并且响应必须按照我请求它们的顺序。以下请求依次请求,但我无法捕获整个请求的 .done() 承诺回调。
我从我的对象中调用 getScripts 方法:
var depArray = ['file1.js', 'file2.js', 'file3.js'];
getScripts(depArray, global_config.jspath + "/");
这会遍历 $.Deferred() 中的数组和嵌套的 $.when promise...
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!!!!'); }
);
},
alert('completely done!!!!') 立即触发,而不是等待 ajax 调用执行并完成。我需要从方法中返回 depMap 数组,所以我有一个按顺序从调用中得到的所有响应的映射。
响应将是:
['contents from file1.js', 'contents from file2.js', 'contents from file3.js']
但我从来没有在最后交出的 depMap。 Promise 对我来说仍然有点莫名其妙。任何帮助表示赞赏...
【问题讨论】:
-
呃,
$.Deferred没有将undefineds 数组作为参数?
标签: javascript jquery ajax dependencies promise