gpt4 book ai didi

angularjs - 使用 Angular 1 应用程序管理 Typescript 中的 ES6/2015 Promise

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:48 25 4
gpt4 key购买 nike

我们有一个使用 Typescript 构建的 Angular 1.5 应用程序,我正在尝试找出处理 ng.IPromise 与 Promise(ES6 promise )的最佳方法。我的偏好是只处理 ES6 Promise 类型。是否有一种优雅的方法来覆盖所有 angular-js 和 angular-material(也包括)接口(interface)以使用 es6 promises?

我能想到的选项:

  1. 使用一些 d.ts 魔法来做到这一点(可以做到吗?)
  2. 在任何地方转换为 ES6 Promise(有效,但不直观)
  3. 为开源做出贡献, fork ng 和 ng Material 的类型,并使它们返回 ES6 Promise 的类型(我可能应该这样做,但不确定我现在是否有时间钻空子)

澄清

angular 应用程序使用的底层 Promise 实现仍然是 $q(不过,我也在应用 angular-bluebird-promises)。我只是想简化/合并所涉及的 Typescript 接口(interface)。

最佳答案

它们应该保留两个不同的界面是有充分理由的。

$q promises 和其他实现之间存在根本区别。 $q 链可以同步并在摘要上运行。这不适用于其他 promise (即原生 Promise)。

在原生和$q promises共存的TS/ES6应用中,Promiseng.IPromise接口(interface)可以聚合为共同点适合他们两个,例如IPromise(没有 ng)。但这没有什么意义。在一段期望 $q promise(反之亦然)的代码中意外使用 native promise 是你最不想做的事情,但如果常见 Typescript 不会阻止它正在使用 IPromise

如果期望从 Angular 导出并由非 Angular 代码使用,最好将其转换为 Promise,如其他答案所建议的那样。

对于给定的非 Angular 上下文

let exportedPromise = getResolvedPromise();
...
exportedPromise.then(...);

这个

function getResolvedPromise() {
return Promise.resolve($q.resolve());
};

将在下一个滴答时触发 then 回调。还有这个

function getResolvedPromise() {
return $q.resolve();
};

将暂停链直到下一个根作用域摘要,即使 then 已被链接到 resolved promise。

虽然与 TS 无关,this question是一个很好的例子,为什么始终注意使用的是 $q 还是原生 promise 是很重要的。

关于angularjs - 使用 Angular 1 应用程序管理 Typescript 中的 ES6/2015 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38122992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com