2017-07-15 46 views
0

我检查我的DOM的某些元素是否完全充电,并且我想通过检查某些元素并且是否加载等待它们的承诺函数来执行此操作。javascript:重试,直到承诺解决,然后执行

这是我的代码

var jq = jQuery.noConflict(); 
var df = jq.Deferred(); 
function keepTrying() { 
try{ 
var el1 = \\element to search for 
var success=true 
catch(e){ 
var success= false 
} 
if (success) { 
    //Resolves promises 
    df.resolve(); 
    return df.promise(); 
} else { 
    //Here it retries.. 
    setTimeout(function() { 
     keepTrying(); 
    }, 500); 
} 
} 
keepTrying(); 
df.done(function() { 
//what to do after 
}); 

你觉得还有一个更简单的方法来做到这一点?我正在研究Qualtrics,因此从一个函数传递到另一个函数时,导入外部库可能会非常棘手。

回答

2

我会使用一个内部递归函数,并解析当元素被发现时的承诺。
你可以后n尝试等

function keepTrying() { 

    var def = $.Deferred(); 

    (function rec() { 
     var el = document.getElementById('something'); 
     if (el === null) { 
      setTimeout(rec, 500); 
     } else { 
      def.resolve(); 
     } 
    })(); 
} 

keepTrying().done(function() { ... }); 
添加计数到,并拒绝承诺