1

タイトルが紛らわしい場合は申し訳ありません。

ユーザーがダイアログを開いたり閉じたりできる状況があります。

ダイアログが開かれると、一連の非同期関数が呼び出されます (Webworkers の場合)。

これらの操作が完了している間でも、ユーザーはダイアログを閉じることができます。

その上で、問題のダイアログに関連する変数とデータのロードをクリーンアップします。つまり、ワーカーが必要な変数を返すと、ワーカーは使用できなくなります。

ワーカーからの結果はもう必要ないので、これで問題ありませんが、もちろん、ダイアログが開いてすぐに閉じられると、javascript エラーがスローされます。

これに対処するためのベストプラクティスと考えられるものは何ですか? すべてを try/catch ステートメントに入れる必要がありますか?

注意してください:この質問はウェブワーカーに固有のものではありません(worker.terminateを使用できることはわかっています)ので、非同期関数全般に関する回答を構成してください。

前もって感謝します。

編集:

これが私が意味することです:

EXAMPLE.dialog = {
               init : function(){
                           this.cache = {
                                    //imagine lots of properties listed here
                           }
                           this.buildDialog();
               }
               buildDialog : function(){
                            //The dialog is built here

                           startFunctions();
               }
               startFunctions : function(){
                          //Perform several asynchronous functions here
                          //All of which reference this.cache.properties when they return
               },
               destroyDialog : function(){
                           //Dialog gets destroyed in DOM
                           delete this.cache;
               }       

}

解決策: この例を入力している間、ばかばかしいことに、 を使用する必要のない非常に単純な解決策が実現しましたtry/catch。必要なすべてのプロパティを 1 つの親プロパティ (この場合はthis.cache) の下に構造化することで、返される非同期関数で 1 つのプロパティの存在を簡単に確認できます。

以前は、プロパティはこのように構造化されていなかったため、個々のプロパティをチェックするのは面倒で肥大化していました。これにもっと早く気づかなかったことをお詫びします。

読んでいる人への上記のコードは、問題の例ではなく、解決策として取られるべきです。

4

2 に答える 2

2

個々のオブジェクト属性を設定するかしないかを気にする代わりに、ワーカー関数に結果を書き込む場所があるかどうかを表す中間状態を作成してみませんか? あなたの特定の例では、これはダイアログボックスが開いているかどうかによって制御されます。

あなたの説明から、私はそれが次のようなものであることを理解しています:

  • ダイアログ ボックスが開いている場合 - 返されたワーカーはいくつかのオブジェクト属性を設定します
  • ダイアログ ボックスが閉じている場合 - 返されたワーカーは一部のオブジェクト属性を入力しません

そのため、ワーカーのコールバック/リターン関数は、データの入力が許可されているかどうかを判断することから始めます。これは、ダイアログ ボックスの状態によって決まります。開いている場合は、入力しても問題ありません。閉じている場合は、他の動作を定義できます。

ダイアログボックスをワーカー人口フラグに結合しない一般的な解決策を目指す方が良いと思います。将来GUIのルールが変更された場合、ワーカー関数がダイアログボックスを直接見ないようにする必要があります。州。

于 2013-05-01T16:29:14.920 に答える
-1

ええと、変数が存在するかどうかを確認するだけですか?

于 2013-05-01T16:01:47.280 に答える