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. 通过在一个父属性下构建所有必需的属性(在这种情况下this.cache),我可以简单地检查返回的异步函数中是否存在一个属性。

以前,这些属性不是以这种方式构建的,这意味着检查每个单独的属性将是乏味和臃肿的。我很抱歉没有早点意识到这一点。

上面的代码对于任何阅读的人都应该被视为一个解决方案,而不是问题的一个例子。

4

2 回答 2

2

与其担心您可能会或可能不会设置的单个对象属性 - 为什么不创建一个中间状态来表示工作函数是否有写入结果的位置?在您的具体示例中,这由对话框是否打开来控制。

根据您的描述,我理解它类似于:

  • 如果对话框打开 - 返回的工作人员将填充一些对象属性
  • 如果对话框关闭 - 返回的工作人员将不会填充某些对象属性

因此,让您的工作人员的回调/返回功能首先确定是否允许他们填充数据 - 这由对话框状态决定。如果它是打开的,你可以很好地填充 - 如果它是关闭的,你可以定义一些其他的行为。

我认为最好瞄准一个不将对话框与工人人口标志耦合的通用解决方案,这样如果将来 GUI 的规则发生变化,你就没有工人功能直接查看对话框状态。

于 2013-05-01T16:29:14.920 回答
-1

呃,只检查变量是否存在?

于 2013-05-01T16:01:47.280 回答