タイトルが紛らわしい場合は申し訳ありません。
ユーザーがダイアログを開いたり閉じたりできる状況があります。
ダイアログが開かれると、一連の非同期関数が呼び出されます (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 つのプロパティの存在を簡単に確認できます。
以前は、プロパティはこのように構造化されていなかったため、個々のプロパティをチェックするのは面倒で肥大化していました。これにもっと早く気づかなかったことをお詫びします。
読んでいる人への上記のコードは、問題の例ではなく、解決策として取られるべきです。