【发布时间】:2018-11-12 13:52:30
【问题描述】:
[注意:由于我不太确定从哪里开始寻找问题,因此我暂时不包含任何示例代码。根据 cmets/建议,我将编辑这篇文章并添加任何需要的内容]
我们正在开发一个 SPA 网络应用程序 (AngularJS),最近观察到一个奇怪的行为(显然,它从一开始就存在,但现在才被发现)。该应用程序旨在以多选项卡的方式工作,每个选项卡专门处理特定类型的数据,并包含一个“刷新”按钮以从数据库重新加载数据。例如,有一个选项卡用于创建和更新用户配置文件,另一个选项卡用于创建和更新用户。每个选项卡都分配有自己的(名称不同)控制器。
当打开两个不同的选项卡时,例如一个用于配置文件,另一个用于用户,每个选项卡都会接收自己的数据,并且不同范围之间有明显的区别。
当打开两个相同类型的选项卡(例如,用户配置文件选项卡的两个实例)时,问题就开始了:
- 在第二个实例中接收到从第一个打开的(实例)选项卡中触发的对数据库的查询。
- 从第二个打开的(实例)选项卡中触发的对数据库的查询也会在第二个实例中收到。
- 当第二个实例关闭时,来自第一个选项卡的任何其他查询都不会得到响应。
我会出现第二个实例以某种方式覆盖了指向 promise 函数的指针(一旦来自 DB 的响应到达,就会调用该指针)。我们为确认这一假设所做的一个简单测试是使用每个选项卡的唯一 ID。在触发数据库检索之前和收到响应时,控制台打印被添加到代码中。结果是在Tab_ID = 1内收到了来自Tab_ID = 0的触发请求。
【问题讨论】:
-
如果没有重现问题的代码示例,就很难判断。可能是您正在使用公共服务。当您打开一个新选项卡时,您会创建一个新的“DB”侦听器。当您关闭一个选项卡时,您将关闭此类型的所有侦听器。再次 - 很难说。如果您可以分享一些代码或更好的代码 - plnkr/codepen/fiddle 上的一个工作示例,它将允许更具体的见解。
-
感谢@yccteam 的评论。请参阅描述一个非常简单的解决方案的编辑。干杯!!!!
-
@FDavidov 抱歉,但您的问题对其他用户毫无意义,因为它完全不清楚。并且在任何地方传递 $scope 都是 99% 的错误解决方案。
-
@PetrAveryanov,我没有传递
$scope,而只是将承诺(函数)定义为$scope对象。这样,同一控制器的两个实例具有不同的 Promise 函数实例化(因为每个控制器都有自己的$scope)。我看不出这有什么问题。你呢?
标签: javascript angularjs promise controller