任何方式调用$ q notify而不会导致$ digest循环?

时间:2016-06-20 22:59:32

标签: javascript angularjs angular-promise angular-digest

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

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

有没有办法使用$qnotify而无需安排$ digest周期?

我正在考虑为WebSocket和IndexedDB相关代码使用不同的promise实现,但我不喜欢有两个promise实现的想法,并且几乎不可能知道在很长时间后将返回哪种承诺链

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我刚发现$$q。根据我的理解,没有消化周期的是$ q,这正是我想要的。

然而,这是一项无证件的私人服务。