【发布时间】:2016-11-02 13:01:07
【问题描述】:
我们有一个使用 Typescript 构建的 Angular 1.5 应用程序,我正在尝试找出处理 ng.IPromise 与 Promise(ES6 承诺)的最佳方法。我的偏好是只处理 ES6 Promise 类型。是否有一种优雅的方式来覆盖所有 angular-js 和 angular-material(也包括在内)接口以使用 es6 承诺?
我能想到的选项:
- 使用一些 d.ts 魔法来做到这一点(可以做到吗?)
- 到处都转换为 ES6 Promise(有效,但不直观)
- 为开源做贡献,分叉 ng 和 ng 材料的类型,并让它们返回 ES6 Promise 类型(我可能应该这样做,但不确定我现在是否有时间研究兔子洞)
澄清
Angular 应用程序使用的底层 Promise 实现仍然是 $q(不过,我也在应用 angular-bluebird-promises)。我只是想简化/整合所涉及的 Typescript 接口。
【问题讨论】:
-
$q 承诺不应盲目地被原生承诺取代,因为它们之间存在根本差异。它们是不同的东西。 $q 链可以是同步的并在摘要上运行。这不适用于其他 Promise 实现。
-
我仍在使用 $q 承诺(已添加说明)
-
那么它们应该保持两个不同的接口,因为它们引用了不同的构造函数。那有不同的……接口。您可以将它们聚合为公分母,例如IPromise,因为在 ES6/TS 应用程序中 $q 和原生 Promise 可能共存。但这几乎没有意义。在一段期望 $q 承诺的代码中意外使用本机承诺是您最不想做的事情。再说一遍,这些接口不应该混用
-
@estus,这是有道理的。请回答,我会接受
-
@Ken 我面临着同样的事情,我喜欢编写一些新代码而不将我的库硬连线到角度,所以基本上我想将 IHTTPPROmsie 返回给 Promsie,我知道 then/ catch/finally 处理程序函数在 angularjs 摘要 cicle 中运行,所以为了符合角度,我想用 $timeout 包装那些需要知道 angularjs 的部分......非常有趣!
标签: angularjs typescript angular-promise es6-promise