如果标题令人困惑,我深表歉意。
我有一种情况,用户可以打开/关闭对话框。
当对话框打开时,会调用一系列异步函数(以 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
. 通过在一个父属性下构建所有必需的属性(在这种情况下this.cache
),我可以简单地检查返回的异步函数中是否存在一个属性。
以前,这些属性不是以这种方式构建的,这意味着检查每个单独的属性将是乏味和臃肿的。我很抱歉没有早点意识到这一点。
上面的代码对于任何阅读的人都应该被视为一个解决方案,而不是问题的一个例子。