我正在尝试使用 jQuery $.when()
在初始化客户端控件之前加载一堆本地化资源:
var fooControl = (function($, kendo, _) {
var
initResources = function() {
return $.when(
window.clientResources.getAll("Messages").done(function(d) {
resources["Messages"] = d;
}),
window.clientResources.getAll("Cost").done(function(d) {
resources["Cost"] = d;
})
);
},
init = function(options) {
/*... */
}
}
//calling:
$(function() {
fooControl.initResources().then(fooControl.init(options));
});
我想要实现的是,initResources 等待资源加载并分配给它们的变量。如果数据已缓存,它们可以从 API 端点或 localStorage 加载。
实际发生的情况是,我收到错误无法读取未定义的属性“CostType”
,这表明成本资源尚未完全加载。
因此,我怀疑对 window.clientResources.getAll()
的调用已正确解析,但未正确解析以下 .done
方法,这会导致竞争条件,资源正在丢失。
如何确保整个调用堆栈(包括 resources
变量的分配)已得到解析,然后才会调用以下 init 函数?
最佳答案
您立即调用 init
并将其返回值作为成功回调处理程序传递,一个简单的解决方案是使用匿名方法
fooControl.initResources().then(function(){
fooControl.init(options);
});
关于javascript - 使用 $.when 时如何解决竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45006009/