2017-07-15 39 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() { ... }); 
添加計數到,並拒絕承諾