gpt4 book ai didi

javascript - AngularJs $q promise 与 async/await 兼容吗?

转载 作者:行者123 更新时间:2023-12-01 16:17:33 28 4
gpt4 key购买 nike

我正在使用 TypeScript(版本分别为 9.07、1.5.11 和 3.7.5)在 Angular/AngularJs 混合应用程序中工作。我们所有的 HTTP 请求,即使是由新的 Angular 组件发出的请求,都使用以纯 Javascript 实现的包装服务,最初是与应用程序的“遗留”AngularJs 端一起开发的,其方法返回由 AngularJs $http 生成的 $q promise 服务。由于该服务是纯 Javascript,因此输入返回值不是问题,因为 TypeScript 认为它们只是 any ,很高兴让我将其转换为 IPromise<TReturnType> .

我的问题是这些 promise 是否与 async 完全兼容和 await TypeScript 中的关键字。使用简单的示例进行尝试似乎效果很好,但我担心只有在运行时使用带有非本地 Promises 的关键字时才会出现极端情况问题。

最佳答案

async 的兼容性这不是问题,因为该关键字不直接依赖于现有的 Promise 实例:它使相应的函数返回一个新创建的 EcmaScript Promise 对象。

如果 async函数返回一个thenable,然后返回的 native promise 将根据该thenable进行解析。

您可以在此代码段中看到后一种效果:

async function test() {
let thenable = { then: cb => cb(13) };
return thenable;
}

let result = test();
console.log(result instanceof Promise);
result.then(console.log); // 13

await关键字可以与返回 thenable 的表达式一起使用,因此在这种情况下也不需要具有 EcmaScript 兼容的 promise :

async function test() {
let thenable = { then: cb => cb(13) };
let value = await thenable;
console.log(value); // 13
}

test();


因此,总而言之,两个关键字都会识别 thenable 并按预期处理它。没有要求这个 thenable 是 native Promise 的实例。

当然 $q promise 是 thenables,所以这很好。

关于javascript - AngularJs $q promise 与 async/await 兼容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62177913/

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