0

フロントエンド JavaScript には、クライアントが特定のメッセージを受信するとすぐにfuncA通常実行される関数があります。A

B を送信する前に、サーバーが別のメッセージを送信する可能性がありますA。これが発生すると、クライアントは 2 つのメッセージを受け取ります。最初に 、B次にA別の関数funcB( によってトリガーされるB) が の前に実行されfuncAます。

さて、ifを最初に実行する場合、受信時にの実行を遅らせるエレガントな方法はありますか?funcAAfuncB

アイデアを説明するための以下の疑似コード:

...

// called upon receiving msg `A`
// but need to delay its execution if receiving `B` and executing funcB first
function funcA(param) {
    ...
}

// called upon receiving msg `B`
function funcB(param) {
    ...
}

...

// receiving messages from server

var msg = JSON.parse(...);

if (msg.type === 'A') {
    funcA(msg.data);
}
else if (msg.type === 'B') {
    funcB(msg.data);
}
else if (msg.type === 'C') {
    ...
}

// deal with other types of message
...

を実行するたびに「フラグ」と条件付きチェックを組み合わせて使用​​することを考えることができますがfuncA、これは私にはあまりエレガントに思えません。

注意: この質問は関数の実行を遅らせる方法に関するものではありません(通常は を使用して実現されますsetTimeout)。代わりに、特定のコード ロジックが与えられた設計パターン/構造を尋ねます。

4

1 に答える 1

2

が呼び出されたかどうかを追跡する方法が必要ですfuncB。その後、その内部を確認funcAし、遅延してそれ自体を呼び出すことができます。

var funcBCalled = false;

function funcB() {
  funcBCalled = true;
  // do something...
}

function funcA() {
  if (funcBCalled) {
    funcBCalled = false;
    window.setTimeout(funcA, 1000);
  } else {
    // do something
  }
}
于 2013-08-13T11:40:04.140 に答える