2017-05-22 10 views
0

以前は非同期プログラミングがJavascriptで普及していたことを考えると、window.setTimeoutの呼び出し回数は私にとっては非常に難解です。私はVMの仕組みとイベントループの仕組みを理解しています。重要なのは、誰かが、なぜecmaの作者が、一種の "nextEventLoop"や "defer"コールを追加して、後でロジックのブロックを強制的に実行させるのかを知りませんか?JSネイティブNextEventLoop

私がsetTimeout(0)を参照するたびに、私はいつもゼロのタイムアウトを設定しようとしたことがないので、私はうんざりします。それでなぜこのハックを強制し続けるのですか?

さらに良い方法がありますか?

答えて

1

ES6では、Promise.resolve().then(() => { ... })はほとんどのことを求めています。プロミスのポリフィルは、ほとんどの環境で利用可能ですが、まだES5だけです。ポリフィルのほとんどはsetTimeoutを避けて、可能な場合にはより良い選択肢を提供します。

+0

ええ、これはまさに私が話していることです。これは私にはsetTimeoutよりもずっと冗長です。効果的にこれは、アクションを延期するために明示的に指定されていない言語の機能を使用し、非同期意味の_効果を使用して、「このJSを現在のキューの後に延期する」という目標を達成します。それは理にかなっていますか?私はあなたの答えを感謝しますが、それは話すために、猫を肌に触れる別の方法です。 – dudewad

+0

あなたの視点によると思います。 'setTimeout'はES仕様の一部でもなく、HTMLの一部であり、Nodeにコピーされます。 'Promise'はイベントループの後のターンで物事をキューに入れるための、ユーザーが見ることができる、ES専用の方法です。 – loganfsmyth

関連する問題