私は、コールバック関数を使用するのではなく、非同期コードを扱うのがより簡単になると理解していますが、純粋な同期コードに使用する利点についてはあまり明確ではありません。Javascriptの約束で同期コードを折り返すことに利点はありますか?
私は、(非同期ではなく純粋な計算)5秒かかる高価な計算を実行する関数を持っているとしましょう。約束は、単一のJSのスレッドと同じスレッドで実行されますので、任意の利点は、これを行うにはあります。
expensiveFunction() {
// expensive function that takes 5 seconds to complete
}
expensiveFunction();
doSomethingAfterwards();
の代わりに、この:
expensiveFunctionPromise() {
return new Promise(function(resolve) {
// expensive function that takes 5 seconds to complete
resolve();
}
}
expensiveFunction().then(doSomethingAfterwards);
編集:私はそのjsfiddleを一緒に入れ両者の間に有意差を示さないように思われる:
https://jsfiddle.net/nu1wj681/
同期バージョンが周りに取りますループごとに3秒、合計6秒ですが、promise/asyncバージョンはループごとに6秒かかりますが、合計時間はまだ6秒です。これは両方が並行して実行されていることを示していますが、糸。
いいえ、コードが複雑になります。これを行う唯一の理由は、関数_might_がある時点で非同期になる場合です。 –
同期コードが高価な場合は、[Webワーカー](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers)を調べる必要があります。 Webワーカーを管理することは、約束を使用する正当な理由になる可能性があります。 – JLRishe