我正在尝试使用jQuery Promises来解决问题。
我有一个UI,我在其中进行API调用并等待响应(这需要一段时间)。我想等待响应,看看是否所有内容都已加载然后执行操作。我怎样才能做到这一点?
这是我的代码:
var d1 = new $.Deferred();
if(($('.fa-spin').length + $('.chart-loading').length )==0){
d1.resolve();
} //Logic behind here is, I'm checking for loading icon,
loading spinner and once they are destroyed,
I want to execute something!
$.when(d1).then(function() {
console.log("fetched");
//Run something
});
我想检查我的加载微调器是否完成,然后触发事件。我怎么能这样做?
当我执行此代码时,延迟永远不会得到解决,并且永远不会打印提取
答案 0 :(得分:1)
你需要不断检查才能解决:
var d1 = new $.Deferred();
var testInterval = setInterval(function() {
if(($('.fa-spin').length + $('.chart-loading').length )==0){
clearInterval(testInterval);
d1.resolve();
}
},100);
$.when(d1).then(function() {
console.log("fetched");
//Run something
});
如果微调器消失,这将检查每.1秒,并在满足条件时解析延迟对象。但是,您可以在那里运行代码而不是延迟/解决。
另外,挂钩实际过程可能更有效,而不是存在一个微调器dom对象,考虑实现一个现有的观察者模式或滚动你自己的模式:observer pattern