AngularJS承诺似乎与摘要周期联系在一起,因为在运行摘要周期之前不会调用成功/错误回调。这意味着使用promises的任何内容(例如$http
或手动创建的promise)也需要触发摘要周期才能使回调运行。
是否可以在Angular中使用promises,而根本不运行摘要周期?我意识到你可以使用$applyAsync
,它会稍后安排摘要周期,但我希望根本不运行摘要周期,并且仍然运行then
回调。
基本上我正在尝试研究如何从一个应用程序中尽可能多地提高性能,这个应用程序将使用需要解决的承诺但不一定需要解析摘要的异步行为。
答案 0 :(得分:3)
不,目前无法实现。每当then
处理程序运行时,它会通过$evalAsync
安排回调,如果尚未安排摘要,则会调度摘要。
这个例外是$timeout
,它接受一个额外的参数来不运行摘要。另一方面 - 在同一个摘要中运行的多个承诺会在同一个摘要中运行。
您的选择是:
- 严肃地使用XMLHttpRequqest - 它不是很难。最大的缺点是它不会尊重拦截器和其他$ http钩子(比如模拟后端)。
- 将$q
装饰为不通过$evalAsync
计划,或者将.thenNoDigest
方法添加到通过setTimeout
计划的promise原型中。
- 对于$ http或XHR,使用userland promise库而不是$ q。