使用 Angular 1 个应用管理 Typescript 中的 ES6/2015 Promise
Managing ES6/2015 Promises in Typescript with an Angular 1 App
我们有一个使用 Typescript 构建的 Angular 1.5 应用程序,我正在尝试找出处理 ng.IPromise 与 Promise(ES6 promise)的最佳方法。我的偏好是只处理 ES6 Promise 类型。是否有一种优雅的方法来覆盖所有 angular-js 和 angular-material(也包括)接口以使用 es6 promises?
我能想到的选项:
- 使用一些d.ts魔法来做到这一点(能做到吗?)
- 转换为 ES6 Promise 无处不在(有效,但不直观)
- 为开源做出贡献,分叉 ng 和 ng material 的类型,并使它们成为 return 类型的 ES6 Promise(我可能应该这样做,但不确定我是否有时间现在是一个兔子洞)
澄清
angular 应用程序使用的底层 Promise 实现仍然是 $q(不过,我也在应用 angular-bluebird-promises)。我只是想 simplify/consolidate 涉及的 Typescript 接口。
Is there an elegant way to override all angular-js and angular-material (also included) interfaces to use es6 promises
我们到处都是IPromise
。由于底层实现差异,很难将 IPromise
替换为 Promise
。如果你愿意,你最好做 Promise.resolve(someIPromise)
,但那样就不会玩 angular。
它们应该保留两个不同的界面是有充分理由的。
$q
promises 与其他实现之间存在根本差异。 $q
链可以同步并在摘要上运行。这不适用于其他承诺(即原生 Promise
)。
在本机和 $q
承诺共存的 TS/ES6 应用程序中,Promise
和 ng.IPromise
接口可以聚合到适合它们的公分母,例如IPromise
(没有 ng
)。但这没有什么意义。在一段期望 $q
promise(反之亦然)的代码中意外使用本机 promise 是你最不想做的事情,但如果 common IPromise
正在使用,Typescript 不会阻止它用过。
如果期望从 Angular 导出并由非 Angular 代码使用,最好将其转换为 Promise
,如其他答案所建议的。
对于给定的非Angular上下文
let exportedPromise = getResolvedPromise();
...
exportedPromise.then(...);
这个
function getResolvedPromise() {
return Promise.resolve($q.resolve());
};
将在下一个价格变动时触发 then
回调。还有这个
function getResolvedPromise() {
return $q.resolve();
};
将暂停链直到下一个根作用域摘要,即使 then
已被链接到已解决的承诺。
虽然与 TS 无关,但 是一个很好的例子,为什么始终注意使用的是 $q
还是原生 promise 很重要。
我们有一个使用 Typescript 构建的 Angular 1.5 应用程序,我正在尝试找出处理 ng.IPromise 与 Promise(ES6 promise)的最佳方法。我的偏好是只处理 ES6 Promise 类型。是否有一种优雅的方法来覆盖所有 angular-js 和 angular-material(也包括)接口以使用 es6 promises?
我能想到的选项:
- 使用一些d.ts魔法来做到这一点(能做到吗?)
- 转换为 ES6 Promise 无处不在(有效,但不直观)
- 为开源做出贡献,分叉 ng 和 ng material 的类型,并使它们成为 return 类型的 ES6 Promise(我可能应该这样做,但不确定我是否有时间现在是一个兔子洞)
澄清
angular 应用程序使用的底层 Promise 实现仍然是 $q(不过,我也在应用 angular-bluebird-promises)。我只是想 simplify/consolidate 涉及的 Typescript 接口。
Is there an elegant way to override all angular-js and angular-material (also included) interfaces to use es6 promises
我们到处都是IPromise
。由于底层实现差异,很难将 IPromise
替换为 Promise
。如果你愿意,你最好做 Promise.resolve(someIPromise)
,但那样就不会玩 angular。
它们应该保留两个不同的界面是有充分理由的。
$q
promises 与其他实现之间存在根本差异。 $q
链可以同步并在摘要上运行。这不适用于其他承诺(即原生 Promise
)。
在本机和 $q
承诺共存的 TS/ES6 应用程序中,Promise
和 ng.IPromise
接口可以聚合到适合它们的公分母,例如IPromise
(没有 ng
)。但这没有什么意义。在一段期望 $q
promise(反之亦然)的代码中意外使用本机 promise 是你最不想做的事情,但如果 common IPromise
正在使用,Typescript 不会阻止它用过。
如果期望从 Angular 导出并由非 Angular 代码使用,最好将其转换为 Promise
,如其他答案所建议的。
对于给定的非Angular上下文
let exportedPromise = getResolvedPromise();
...
exportedPromise.then(...);
这个
function getResolvedPromise() {
return Promise.resolve($q.resolve());
};
将在下一个价格变动时触发 then
回调。还有这个
function getResolvedPromise() {
return $q.resolve();
};
将暂停链直到下一个根作用域摘要,即使 then
已被链接到已解决的承诺。
虽然与 TS 无关,但 $q
还是原生 promise 很重要。