私は基本的にこのパターンが存在し、名前を持っている必要があると確信しています...今のところ私はそれを「ゲートパターン」と呼びます...
ここにあります:
私のウェブページのJavaScriptでは、さまざまな非同期プロセスをトリガーする必要があります。trully async jsについては説明しませんが、とにかく2つまたは3つのAJAX呼び出しをトリガーする必要があり、UIの構築が完了していることを確認する必要があります。
その時だけ、これらすべてのプロセスが終了したら、特定の関数を実行したいと思います。そして正確に一度。
例
1: cropStore loaded()
2: resizeEvent()
3: productStore loaded()
パターン:すべての(成功した)Ajax-load-callbackの終了時、GUI構築ルーチンの終了時など...それぞれのフラグをfalseからtrueに設定し、gatedAction()を呼び出します。
onEvent( 'load',
{
.... // whatever has to happen in response to cropStored, resized, etc...
// lastly:
f1 = true; //resp f2, f3, ...
gatedAction();
}
Gateはフラグをチェックし、フラグがまだ設定されていない場合は戻り、すべてのフラグ(または私が呼んでいるように:gates)が開いている場合にのみ、ターゲット関数を呼び出します。すべての非同期前提条件がgatedAction()を1回だけ呼び出す場合、実際のtargetFunctionが1回だけ呼び出されることを確信できます。
gatedAction ()
{
// Gate
if ( ! f1) return;
if ( ! f2) return;
if ( ! f3) return;
// actual Action ( <=> f1==f2==f3==true )
targetFunction();
}
実際には、確実に機能します。補足:javascriptは真のマルチスレッドではないため、java-typical(js-typicalではない)の同期/揮発性の懸念は無視できると思います。Afaik関数は、同じドキュメントランタイムで別のjavascript関数を付与するためだけに、その途中で停止することはありません...
それで、誰か、これの名前はありますか?:-)
特に複雑なバックエンドUIを使用する場合は、このパターンが実際に非常に頻繁に必要になります。