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