【问题标题】:Any way to call $q notify without causing $digest cycle?有什么方法可以调用 $q notify 而不会导致 $digest 循环?
【发布时间】:2016-06-20 22:59:31
【问题描述】:

我有一个 $digest 周期大约需要 5 毫秒的应用程序,我在我的应用程序中经常使用 $q.deferdeferred.notify。问题是每次调用deferred.notify 时,都会安排一个摘要周期,并导致角度运行5ms。

结果,当我从服务器获取几千行数据时(通过WebSocket,数据被一一接收),应用程序可以使用100%的CPU并且变得非常无响应。我对这些数据做的唯一事情就是将它们保存到 IndexedDB 中。

有什么方法可以在不安排 $digest 周期的情况下使用 $qnotify

我正在考虑为 WebSocket 和 IndexedDB 相关代码使用不同的 Promise 实现,但我不喜欢有两个 Promise 实现的想法,而且几乎不可能知道在长链之后会返回哪种 Promise。

【问题讨论】:

    标签: javascript angularjs angular-promise angularjs-digest


    【解决方案1】:

    您可以使用不同的 Promise 实现,或者这听起来很像 RxJS 的工作。像浏览器原生版本或 Bluebird 这样的非角度承诺不会在所有通知上触发摘要循环。然后你只需要手动消化东西 - 这就是我所做的:我使用 RxJS 来处理 websocket 事件并在需要时偶尔在适当的范围内手动调用 scope.$apply(因为你 - 我不需要更新我的范围在每个 websocket 事件上)。

    【讨论】:

    • RxJS 听起来不错。这应该可以解决我对两种不同承诺的担忧。
    【解决方案2】:

    我刚刚找到$$q。据我了解,这正是我想要的没有摘要循环的 $q。

    然而,它是一个无证的私人服务。

    【讨论】:

      猜你喜欢
      • 2019-08-22
      • 2021-01-08
      • 2013-04-30
      • 1970-01-01
      • 2016-10-25
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多