を実行する前に、私は次のことを達成するために、共通のパターンや方法を探しています:クリアいくつかの条件は、異なる瞬間に、
サーバー(ブラウザ)クライアントにメッセージを送信します。これらのメッセージは一斉に到着するのではなく、異なる瞬間に到着します。
受信メッセージごとに、クライアントはそれを条件リストと比較します。メッセージが条件と一致する場合、その条件は満たされます。
すべての条件が満たされると、クライアントはいくつかの注文を実行し、次の条件セットに移動します。
これは、使用可能なすべての条件が満たされるまで繰り返されます。この問題に対する
私の実際のアプローチは以下の通りである:
ネストされた配列の組は、各条件セットが満たされたときに実行する条件のセット、および同等のアクションを含みます。例:
var condAct =
[
[ // set 0
[ // conditions
"condition 1", "condition 2"
],
[ // actions
action, action2
]
],
...
変数は実際の条件の数を保持します。
var condStep = 0;
メッセージが到着すると、単一の機能がトリガーされます。受信メッセージを実際のステップのすべての条件と比較します。メッセージが条件と一致する場合、条件はアレイから削除されます。一度このステップ上のすべての条件が満たされ、そしてその配列から削除、アクションが実行され、我々は次のステップに移動します。
function condRcv(msg){
for (var i = 0; i < condAct[condStep][0].length; i++) { // for each condition in the actual set
if(msg === condAct[condStep][0][i]){ // if it matches the incoming message
condAct[condStep][0].splice(i, 1); // remove the condition from the array
if(condAct[condStep][0].length === 0){ // and if the actual conditions array is already empty
for(var j = 0; j < condAct[condStep][1].length; j++){ // for each action in the actions array
condAct[condStep][1][j]; // execute it
condStep++; // up a step
return; // get outta here
}
}
}
}
}
私のアプローチは、最初に有効なようだが、少し複雑、両方の手順とコード。
このような状況を解決するためにjsまたはjqueryによく使用されるパターンまたはメソッドがありますか?
ありがとうございました。 質問を改善できると思ったら教えてください。
はい...一般的なパターンは、約束の配列を使用してPromise.all(にその配列を渡す)、コールバックの中にすることですあなたは送信されたのと同じ順序で応答を持っています。タグ付きとしてjQueryを使用する場合、 'Promise.all()'の代わりに '$ .when()'を使用できます。 – charlietfl
@charlietfl答えをありがとう。私はそれについて読んできましたが、私は約束を完全に理解していません。私はそれを受け入れることができるように詳細な答えを書くためのケア? –
あなたが作っているこれらのajaxリクエストですか? – charlietfl