Ken*_*Ken 4 angularjs typescript es6-promise angular-promise
我们有一个使用 Typescript 构建的 Angular 1.5 应用程序,我正在尝试找出处理 ng.IPromise 与 Promise(ES6 Promise)的最佳方法。我的偏好是只处理 ES6 Promise 类型。是否有一种优雅的方法来覆盖所有 Angular-JS 和 Angular-Material(也包括)接口以使用 es6 Promise?
我能想到的选项:
澄清
角度应用程序使用的底层 Promise 实现仍然是 $q (不过,我也在应用 Angular-bluebird-promises)。我只是想简化/整合涉及的 Typescript 接口。
有充分的理由解释为什么它们应该保留两个不同的接口。
承诺和其他实现之间存在根本区别$q。$q链可以是同步的并且在摘要上运行。这不适用于其他承诺(即 native Promise)。
在 TS/ES6 应用程序中,本机和$qPromise 共存,Promise并且ng.IPromise接口可以聚合到适合它们两者的公分母,例如IPromise(没有ng)。但这没有什么意义。在一段需要 Promise 的代码中意外使用 Native Promise $q(反之亦然)是您最不想做的事情,但如果IPromise使用 Common,Typescript 不会阻止这种情况。
如果期望从 Angular 导出并由非 Angular 代码使用,则最好将其转换为Promise,正如另一个答案所建议的那样。
对于给定的非 Angular 上下文
let exportedPromise = getResolvedPromise();
...
exportedPromise.then(...);
Run Code Online (Sandbox Code Playgroud)
这
function getResolvedPromise() {
return Promise.resolve($q.resolve());
};
Run Code Online (Sandbox Code Playgroud)
将then在下一个价格变动时触发回调。和这个
function getResolvedPromise() {
return $q.resolve();
};
Run Code Online (Sandbox Code Playgroud)
将暂停链直到下一个根范围摘要,即使then已链接到已解决的承诺。
虽然与 TS 无关,但这个问题是一个很好的例子,说明为什么始终了解它是$q使用的 Promise 还是本机 Promise 很重要。
| 归档时间: |
|
| 查看次数: |
3505 次 |
| 最近记录: |