AngularJS promises 似乎与摘要循环相关联,因为在摘要循环运行之前不会调用成功/错误回调。这意味着任何使用 promises 的东西,例如 $http
或手动创建的 promises,也需要触发一个摘要循环才能运行回调。
是否可以在 Angular 中使用 promise ,而根本不运行摘要循环?我知道你可以使用 $applyAsync
,它将摘要周期安排得晚一点,但我希望根本不运行摘要周期,并且仍然有 then
回调运行。
从本质上讲,我正在尝试找出如何从使用相当多的异步行为的应用程序中获得尽可能多的性能,这些异步行为需要解决 promises 但不一定要运行摘要循环。
最佳答案
不,目前不可能。每当一个then
处理程序运行它通过 $evalAsync
安排回调如果尚未安排摘要,则安排摘要。
异常(exception)情况是 $timeout
接受一个不运行摘要的额外参数。另一方面 - 在同一个回合中解决的多个 promise 在同一个摘要上运行。
您的选择是:
- 认真地直接使用 XMLHttpRequqest - 这不是很难。最大的缺点是它不会尊重拦截器和其他 $http Hook (如模拟后端)。
- 装饰$q
不通过 $evalAsync
安排或添加 .thenNoDigest
通过 setTimeout
调度的 promise 原型(prototype)的方法.
- 使用用户态 promise 库而不是 $q 用于 $http 或 XHR。
关于javascript - 在没有摘要循环的情况下解决 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29428629/