2017-07-10 1 views
2

私のコードは、このようなものである一方、中に取り出すことができます。ループがスケジュールされている間、次のチックに多くのフェッチがあるようです。しかし、次のダニにスキップしないでください。 問題を解決するにはどうすればよいですか?にはどうすればループ

+0

私はあなたがjsfiddle –

+5

を投稿する場合、これは非常に多くの代わりにwhileループの[XY問題](http://xyproblem.info/) –

+0

使用 'setTinterval()'のように聞こえるあなたの問題を解決します。 – n00dl3

答えて

1

while(true)シングル「ダニ」fetch無限に多くの時間を呼び出そうとします無限ループを作成します。新しいfetchコールの発行は決して終わらないので、次のダニには決して行きません。

この機能はCPUを大量に消費するため、ページ全体がロックされる可能性があります。


解決策はありますか?

おそらく、結果が何らかの条件を満たすまでフェッチを続けることです。

var resultFound = false; 
 

 
var fetchNow = function() { 
 
    fetch('some/address').then(function() { 
 
    if(someCondition) { 
 
     resultFound = true; 
 
    } 
 
    else { 
 
     fetchNow(); 
 
    } 
 
    }); 
 
} 
 

 
fetchNow();

この方法は、代わりに

fetch! 
fetch! 
fetch! 
fetch! 
... 

の:あなたはそれがfalseある場合fetchthenコールバックで状態を確認し、再発行していることを達成することができます。 ..ふるまうことになるだろう

fetch! 
    wait for response 
    check condition 
if false, fetch! 
    wait for response 
    check condition 
if true, stop. 

...これはおそらくあなたが期待していたものです。 fetchは、自然の中でasyncので、whileが完了するまでにfetchasync操作を待つと、すぐに次の反復に行くのではないだろうどこ

2

whileループがsyncです。

あなたが同期、次のようにこれを達成することができますので、whileループは、ここで私が言うも、無用間違っている、

function syncWhile(trueOrFalse){ 
    if(trueOrFalse) { 
    fetch('some/address').then(){ 
     if(someCondition){ 
      trueOrFalse = false; 
     } 
     syncWhile(trueOrFalse); 
    } 
    } 
} 
syncWhile(true); 
0

をすべてフェッチオフwhileループの火災それらのいずれかがthen()に到達する前に、 。

フェッチを継続するかどうかは、then()にする必要があります。

then() -syntaxが間違っているようです(例を編集しているだけのエラーかもしれません)。さらに、ブーリアンヘルパー変数を省略することもできます(別の場所で必要な場合を除きます)。

function fetchUntilCondition(){ 
    fetch('some/address').then(function(response){ 
     if(!someCondition) { 
      fetchUntilCondition(); // fetch again 
     } 
    }); 
} 
fetchUntilCondition(); 
関連する問題