我正在使用TypeScript(分别是版本9.07、1.5.11和3.7.5)在Angular / AngularJs混合应用程序中工作。我们所有的HTTP请求,甚至是由新的Angular组件发出的请求,都使用以纯Javascript实现的包装服务,该服务最初与应用程序的“旧版” AngularJs一起开发,其方法返回由AngularJs $ http生成的$ q promises服务。由于该服务是纯Javascript,因此返回值的键入不是问题,因为TypeScript认为它们只是an any
,所以很高兴让我将其转换为IPromise<TReturnType>
。
我的问题是这些承诺是否与TypeScript中的async
andawait
关键字完全兼容。使用简单的示例进行尝试似乎可以很好地工作,但是我担心只有在使用带有非本地Promises的关键字的运行时才会出现的极端情况。
与之兼容async
不是问题,因为该关键字不直接取决于现有的promise实例:它使相应的函数返回新创建的EcmaScript Promise对象。
如果一个async
函数返回一个thenable,则返回的本机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是本地Promise的实例。
当然,$q
诺言是可行的,所以很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句