現在、Flex に依存して、ExternalInterface コールバックを介して重労働の一部を行う Javascript コードがあります。それは世界で最も美しいものではありませんが、うまくいきます。Flex 側では、次のように定義します (remoteCall は典型的な RemoteObject の動作を持つラッパーです)。
ExternalInterface.addCallback("doOperation",
function(data:String, windowId:String):void { doOperation(data, windowId) });
private function doOperation(data:String, windowId:String):void {
remoteService.remoteCall(data, function(e:ResultEvent):void {
ExternalInterface.call("doOperationComplete", windowId, e.result);
});
}
Javascript 側には次のものがあります。
function doOperationComplete(windowId, result) {
var win = windowHandles[windowId];
win.handleResult(result);
}
これはほとんどのユースケースでうまく機能しますが、基本的なタスク監視を実装しようとしているので、もっと良い方法があることを願っています。上記と同じパスをたどると、タスクのステータスを取得するために JS -> Flex 呼び出しが行われるシナリオに行き着きます。その呼び出しは void を返し、その呼び出しが完了すると、Flex -> JS 呼び出しがあり、JS にタスク ステータスが与えられます。次に、JS はステータスを確認し、なんらかのアクションを実行する必要があります。あきらめて、結果に対して何かを行い、遅延後に再度ステータスを確認します (別の JS -> Flex、Flex -> JS サイクル)。
私はまだこれをコーディングし始めていませんが、複数のタスクを管理し、Javascript への Flex 呼び出しを元のコールバックに関連付け、適切にスコープされたデータを渡すなどで、すぐに非常に複雑になるようです。
良い代替手段はありますか?この種のコールバック シナリオ用に設計された Javascript タスク プラグインのようなものはありますか? 私が見落としているデザインパターンはありますか?doOperation
void の代わりにタスク ステータスを返すように、リモート サービス呼び出しを同期するなどの疑わしい手法でさえありますか?