等待事件完成然后执行另一个事件的问题

时间:2016-08-25 23:48:41

标签: javascript jquery

我正在尝试使用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
                    });

我想检查我的加载微调器是否完成,然后触发事件。我怎么能这样做?

当我执行此代码时,延迟永远不会得到解决,并且永远不会打印提取

1 个答案:

答案 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