比較的些細な機能以外の目的でJavascriptを書くことを恐れる傾向がある理由のひとつは、あるものが実際に別のものに依存しているときに、コールバックのウォーターフォールを回避するための適切なアプローチを見つけられなかったためです。そのようなアプローチはありますか?
私は現在Titaniumアプリに取り組んでおり、この現実世界のシナリオにぶつかっています。
ユーザーの現在地からの距離を計算するために必要な一連の施設があります。これには、ユーザーの現在の位置(1回だけ発生する必要があります)を取得し、施設の場所をループしながら、各場所の位置を取得して距離を計算する必要があります。場所(long / lat)を取得するAPIは非同期であるため、「簡単な」アプローチは次のようになります(擬似コードが続きます)。
foreach facility {
API.getCurrentLocation( function( location ) { // async, takes a callback fxn arg
var here = location.coordinates;
API.getFacilityLocation( function( e ) { // async, takes a callback fxn arg
var there = e. coordinates;
var distance = API.calculateFrom( here, there );
});
});
}
ただし、これはすべてループ内にあるため、毎回現在の位置を計算しています。実際に必要な作業よりも多くの作業が必要です。現在の場所を1回だけ取得し、その場所を距離計算に使用できるように、これをリファクタリングすることはまだできていません。
ラムダとクロージャをサポートする言語が爆発的に増えていることを考えると、誰かがこれらのウォーターフォールを管理しやすくするためのアプローチを見つけたに違いないと私は考え続けていますが、そのようなソリューションを整理する方法についての適切な説明はまだ見つかりません。
何か提案やヒントはありますか?
どんな洞察も大歓迎です。