如果標題混淆,我很抱歉。處理調用可能不再可用的變量的異步函數的最佳做法是什麼?
我有一種情況,用戶可以打開/關閉對話框。
當對話框打開時,會調用一系列異步函數(在webworkers的情況下)。
當這些操作完成時,用戶仍然可以關閉對話框。
當我們清理了一大堆與所討論的對話有關的變量和數據時,這意味着當工作人員返回它所需要的變量時將不再可用。
這很好,因爲我們不再需要工作人員的結果,但當然,如果快速關閉對話框,它會拋出javascript錯誤。
什麼被認爲是處理這個問題的最佳做法?我應該把整個事情放在try/catch語句中嗎?
請注意:這個問題不是特定於webworkers(我知道我可以使用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;
}
}
SOLUTION:好愚蠢,同時輸入這個例子了實現一個非常簡單的解決方案,不需要使用try/catch
。通過構建一個父屬性下的所有必需屬性(在本例中爲this.cache
),我可以簡單地檢查返回的異步函數中是否存在一個屬性。
以前的屬性不是以這種方式構建的,這意味着檢查每個單獨的一個將是單調乏味和膨脹。我很抱歉沒有意識到這一點。
上面給任何人閱讀的代碼應該被看作是一個解決方案,而不是一個問題的例子。
這是一個錯誤,那麼解決它。 – djechlin 2013-05-01 16:01:24
你能告訴我們你正在使用的是什麼的代碼示例? – 2013-05-01 16:01:25
@RickViscomi並主張確切的代碼將是毫無意義的,矯枉過正,所以我就敲了一下,我們所面對的是一個很小的例子。 – gordyr 2013-05-01 16:05:32