我有一个应用程序,需要按特定顺序加载数据:首先是根URL,然后是所有模式,最后使用这些模式和URL来初始化各种数据对象的应用程序。当用户使用应用程序导航时,会加载数据对象、对其进行模式验证并显示它们。当用户进行增删改查操作时,模式提供了第一层验证。
我在初始化方面遇到了问题。我使用Ajax调用来获取根对象,$.when(),然后创建一个承诺数组,每个模式对象对应一个承诺。那是有效的。我在控制台看到了这个获取。
然后我看到了所有模式的获取,所以每个$.ajax()调用都有效。fetchschemas()确实返回一个承诺数组。
但是,最终的 when() 子句从未触发,“DONE”一词从未在控制台上出现。jquery-1.5的源代码似乎暗示“null”作为传递给$.when.apply() 的对象是可以接受的,因为如果没有传递对象,when() 将构建一个内部Deferred()对象来管理列表。
使用 Futures.js 时会起作用。如果不像这样管理 jQuery Deferreds 数组,该怎么办?
我在初始化方面遇到了问题。我使用Ajax调用来获取根对象,$.when(),然后创建一个承诺数组,每个模式对象对应一个承诺。那是有效的。我在控制台看到了这个获取。
然后我看到了所有模式的获取,所以每个$.ajax()调用都有效。fetchschemas()确实返回一个承诺数组。
但是,最终的 when() 子句从未触发,“DONE”一词从未在控制台上出现。jquery-1.5的源代码似乎暗示“null”作为传递给$.when.apply() 的对象是可以接受的,因为如果没有传递对象,when() 将构建一个内部Deferred()对象来管理列表。
使用 Futures.js 时会起作用。如果不像这样管理 jQuery Deferreds 数组,该怎么办?
var fetch_schemas, fetch_root;
fetch_schemas = function(schema_urls) {
var fetch_one = function(url) {
return $.ajax({
url: url,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
return $.map(schema_urls, fetch_one);
};
fetch_root = function() {
return $.ajax({
url: BASE_URL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
$.when(fetch_root()).then(function(data) {
var promises = fetch_schemas(data.schema_urls);
$.when.apply(null, promises).then(function(schemas) {
console.log("DONE", this, schemas);
});
});