2016-08-25 47 views
0

我正在尝试使用jQuery Promises来解决问题。等待事件完成后再执行另一个问题

我有一个用户界面,我在其中进行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

递延永远不会因为你检查FO解决条件'($('。fa-spin').length + $('。chart-loading').length)== 0'恰好一次,立即且永不再次,所以除非这个条件在创建延期,延期永远不会解决 –

+0

如何继续检查?对不起,有点新! – TechnoCorner

+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

+0

太棒了!非常感谢你的信息! – TechnoCorner

相关问题