2016-10-06 3 views
5

内部に約束している "無限"のwhileループが必要です。次のコード例があります:プロミスと非同期エンドレスループを持つ方法

したがってwhile-loopは無限に実行する必要があります。ただし、エラーが発生する場合を除き、whileループは停止する必要があります。どうすればこれを達成できますか?

私はあなたは私が何を意味するかを理解することができることを望むと事前に感謝:)

+1

約束反応が非同期で実行されています。最初のwhileループは無限の**ブロッキング**ループであり、タイムアウトコールバックが発生しないため決して解決されない無限の約束を作成します:D _Possibly_前回の約束から3秒待っているタイムアウトまたはインターバルタイマーが必要です非同期チェックのために作成されたものは、別のチェックを実行する前に解決されますか? – traktor53

+0

問題は、私の約束が解決するのにどれくらい時間がかかっているか分かりません。私の例を明確にするために 'setTimeout()'しか使わなかったのです。しかし、Felix Klingのソリューションは完璧に動作するので、他のソリューションは必要ありませんが、とにかく感謝します:) – C4rmond4i

答えて

4

どのように私はこれを達成することができますか?

約束は解決できないため、ブロックループはありません。 JavaScript's event loop on MDNについて詳しく知ることができます。約束が解決されたとき

代わりに、もう一度関数を呼び出す:実行するためにそれらを引き起こしたスレッドが完了した後に(履行または拒否ハンドラを呼び出す)

Promise.resolve().then(function resolver() { 
    return someAsyncFunction() 
    .then(doSomething) 
    .then(resolver); 
}).catch((error) => { 
    console.log("Error: " + error); 
}); 
+0

それも機能します:P –

+0

ああ、私は最初に台無しだった。 OPsオリジナルのコードを十分に見ていない – Bergi

+0

このコードは、この場合はおそらく問題ないが ".catch((err)=> {})'のBE WEARYを "食べる"でしょう。 'throw err;'を含む。 – kingdango

関連する問題