javascript:重试直到promise得到解决,然后执行

时间:2017-07-15 10:26:10

标签: javascript promise try-catch qualtrics

我正在检查我的DOM中的某些元素是否完全充电,我想通过一个检查某些元素的promise函数来执行它,如果没有加载则等待它们。

这是我的代码

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,因此从一个函数传递到另一个函数时,导入外部库可能会很棘手。

1 个答案:

答案 0 :(得分:2)

我使用内部递归函数,并在找到元素时解析promise 您可以为此添加计数,并在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() { ... });