javascript: 重试直到promise解决后再执行

javascript: Retrying until promise is resolved and then execute

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

我会使用内部递归函数,并在找到元素时解析 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() { ... });