我对C#的异步/等待非常熟悉,并且已经使用TypeScript一年左右了,有人能否提供一个简单的示例来解释它在TypeScript中是如何工作的?
如果示例包括Angular/jQuery Promise,那将非常有帮助,因为它将清楚地展示实际实现。
我对C#的异步/等待非常熟悉,并且已经使用TypeScript一年左右了,有人能否提供一个简单的示例来解释它在TypeScript中是如何工作的?
如果示例包括Angular/jQuery Promise,那将非常有帮助,因为它将清楚地展示实际实现。
PromiseLike
和PromiseConstructorLike
接口的ES6 Promise或类似物,在lib.d.ts中可以找到这些接口(阅读更多)。jQuery promise 没有实现这些接口,因此无法使用它。
以下是使用ES6 promise的简单示例:
function getStringFromWebServerAsync(url: string) {
return new Promise<string>((resolve, reject) => {
// note: could be written `$.get(url).done(resolve).fail(reject);`,
// but I expanded it out for clarity
$.get(url).done((data) => {
resolve(data);
}).fail((err) => {
reject(err);
});
});
}
async function asyncExample() {
try {
const data = await getStringFromWebServerAsync("http://localhost/GetAString");
console.log(data);
}
catch (err) {
console.log(err);
}
}
asyncExample();
await
语句的代码都需要在async
函数中,因此我已将代码封装在其中。但是,即将推出的提案增加了“顶级等待”,这将在TypeScript 3.8中可用。在这里阅读更多信息,在这里查看TypeScript详细信息。TS1308 'await' expression is only allowed within an async function.
和
TS1311 Async functions are only available when targeting ECMAScript 6 and higher.
了解更多信息,请参阅例如http://blogs.msdn.com/b/typescript/archive/2015/11/03/what-about-async-await.aspx
--experimentalAsyncFunctions
编译器选项进行实验(而且1.6 beta版本刚在周三发布)。 - David Sherret