3

AngularJS 的 Promise 似乎与摘要循环相关联,例如,在运行摘要循环之前不会调用成功/错误回调。这意味着任何使用 Promise 的东西,例如$http手动创建的 Promise,也需要触发一个摘要循环,以使回调运行。

是否可以在 Angular 中使用 Promise,而根本不运行摘要循环?我意识到您可以使用$applyAsync,它将摘要周期安排在稍后的时间,但我希望根本不运行摘要周期,并且仍然then运行回调。

从本质上讲,我正在尝试研究如何从一个应用程序中尽可能多地压缩性能,该应用程序将使用相当多的异步行为,这些行为需要解决 Promise,但不一定需要运行摘要循环。

4

1 回答 1

3

不,目前不可能。每当then处理程序运行时,它都会安排回调$evalAsync,如果尚未安排摘要,则通过该回调安排摘要。

例外情况是$timeout它接受一个额外的参数来不运行摘要。另一方面 - 在同一轮次中解决的多个承诺在同一个摘要上运行。

您的选择是: - 认真地直接使用 XMLHttpRequqest - 这不是很难。最大的缺点是它不会尊重拦截器和其他 $http 钩子(如模拟后端)。- 装饰$q为不通过调度$evalAsync或向调度通过的 Promise 原型添加.thenNoDigest方法setTimeout。- 为 $http 或 XHR 使用用户态承诺库而不是 $q。

于 2015-04-03T19:03:25.953 回答