5

私は基本的にこのパターンが存在し、名前を持っている必要があると確信しています...今のところ私はそれを「ゲートパターン」と呼びます...

ここにあります:

私のウェブページの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を使用する場合は、このパターンが実際に非常に頻繁に必要になります。

4

4 に答える 4

2

それは私にはBalkingパターンのように聞こえます。

于 2010-10-11T09:31:26.587 に答える
1

パターンに特別な名前があるかどうかはわかりませんが、他のすべてのアクションを開始したスレッドを、すべてV呼び出しが行われるまでブロックする、カウントセマフォを使用するのと同じように見えます。もちろん、JavaScriptにはスレッドやセマフォはありませんが、多くのブール変数を使用する代わりに、1つの整数だけを使用してカウントすることができます。

于 2010-10-11T10:27:09.830 に答える
1

これはランデブーパターンに似ていますが、このパターンは通常、マルチスレッドリアルタイムシステムのコンテキストで使用されます。

于 2010-10-11T10:30:25.953 に答える
0

あなたの質問に対する実際の答えに加えて、Javascript用のRxフレームワークに興味があるかもしれません。これは.NETバージョンの移植版であり、イベントを作成できるため、大量のフラグ変数を操作する必要はありません。それはこの種のもののためのものです。

http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx

于 2010-10-11T10:01:34.407 に答える