以前に複数のリモートオブジェクト呼び出しを並列に実行していて、それらをシリアルで実行させようとしています。Actionscriptでのシンプルなイベントチェーニング。ディスプレイを強制的にリフレッシュさせるには
私はそれがハックアプローチ(バンドエイド!)だけど、これまでのところ、私のアプローチは、forループの各並列要求を開始これを取るようにされています:
(オリジナルコード)
for (i = 0; i < _processQ.length; i++){
fObj = _processQ.getItemAt(i);
f = fObj.Name;
fObj.Progress = "Processing...";
ro.process(gameid,f);
}
を
と、このように変更します。
(新コード)
for (i = 0; i < _processQ.length; i++){
fObj = _processQ.getItemAt(i);
f = fObj.Name;
fObj.Progress = "Processing...";
ro.process(gameid,f);
//pause this loop until a result is returned from the request that was just made.
_pause_queue = true;
while(_pause_queue){
//do nothing
}
}
ここで、_pause_queue
は、クラスのプライベートグローバルブール値です。 fault-handlerおよびresponse-handler関数では、それはfalseに戻され、無限のwhere-loopが解放され、forループが続行されます。
これは機能しますが、UIはwhileループの終了後にのみ更新されるため、応答を待つ間にアプリケーションがハングアップするような負の副作用が発生します。
フラッシュにディスプレイを更新させるためにwhileループの中に入れることができるものはありますか? VBでは(ugh!)私はDoEvents
を使用しますが、私はActionscriptに相当するものはわかりません。
代わりに、アプリケーションを書き換える完全のシンプルキューイングシステムのショートを追加する方法はありますか?これは旧式のコードなので、締め切りが早いので、できるだけ少し修正したいと思います。 (さもなければ、私はそれを最初から書き直してSwizを使ってイベントチェーンを取得します)
+1。 whileループのどのタイプよりも優れています。Flexの非同期性を取り入れています。それを愛するには時間がかかりますが、本当に優れています...アイテムの数が分かっていれば、次のようなことができるような流暢な非同期関数連鎖を書くことを検討するかもしれません: 'executeProcess(proc1、handler1).executeProcess (proc2、handler2).executeProcess(proc3、handler3).Go() 'これは同じようなことですが、より表現力があります。 –
ありがとう、私はこれに似た何かをするつもりです。 –