2017-12-31 7 views
0

機能:DOMロードを無限に待機する方法はありますか?

window.addEventListener("DOMContentLoaded" , function(){}); 

または

window.addEventListener("load" , function(){}); 

それは私が早く、それは両方の方法の間にいくつかの特殊性とDOMをロードして、何もすることができます。

これは"as soon as"

ですが、どのように私はDOMをロードするために、無期限に待つことができますか?

DOMをロードするだけで、関数を実行しますか? 私に説明しましょう:私は機能、誰も持っていると想像してみてください。

cube cube = n => Math.pow (n, 3); 
if (document.readyState === 'complete') cube (3); 

コード内でキューブ機能がFUNDAMENTALであるとします。

DOMがロードされていない場合、その関数は実行されません。

だから、どのように私は無期限にDOMがロードされるまで、待って、この主な機能(キューブ)に応じて動作する別の関数を、延期することができます

だから、私のスクリプトは、その点に達し、DOMはしなかった場合これらの関数はすべて値を持たないでしょう。代わりに

マイフォーカス "この問題が発生した場合、これを行う"

は次のとおりです。

"これが起こると、これを実行するのを待ちます"
+2

はあなたが約束を使用して検討している:キューブ()を呼び出すことで、この約束の決意を扱いますか? –

+0

'document.addEventListener( 'deviceready'、()=> {/ *すべてがロードされています* /})' iirc、これはうまくいくはずです。 –

答えて

0

ステップ1:DOMContentLoadedハンドラの両方で変数を表示するあなたのcube機能にあります。その値は、そのハンドラによって解決される約束でなければなりません。

const DOMLoaded = new Promise((resolve, reject) => { 
    document.addEventListener("DOMContentLoaded", resolve); 
    // consider creating reject-on-timeout 
    // with something like setTimeout(reject, 60000 * 10); 
}); 

ステップ2:たとえば

DOMLoaded.then(() => cube(3)); 
+0

これは無期限に待っていますか?私が拒否を適用する場合、待機は最大60000 * 10秒ですか? –

+0

1)はい、2)10分。 – raina77ow

関連する問題