【问题标题】:How does the async/await syntax work in TypeScript?TypeScript 中的 async/await 语法是如何工作的?
【发布时间】:2015-09-04 15:33:56
【问题描述】:

我对 C# 的 async/await 非常熟悉,并且使用 TypeScript 已经一年左右了,谁能举一个简单的例子来解释它在 TypeScript 中是如何工作的?

如果该示例包含 Angular/jQuery 承诺,这将非常有帮助,因为它将提供一个实际实现的清晰视图。

【问题讨论】:

标签: typescript async-await typescript1.7


【解决方案1】:

关键是使用ES6 Promise 或实现lib.d.ts (Read more) 中的PromiseLikePromiseConstructorLike 接口的东西。一个 jQuery 承诺 does not implement 这些接口,所以它不会与这些接口一起工作。

这是一个使用 ES6 承诺的简单示例:

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 中可用。阅读更多 heresee here for TypeScript details

【讨论】:

    【解决方案2】:

    请注意,您需要在 Typescript 1.7 中以 ES6 为目标才能使用 async/await。对于较低版本,Visual Studio 输出

    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

    【讨论】:

    • 这是很好的信息,但并不能真正回答问题。当你有足够的声誉时,也许它应该是一个评论。
    • 我很清楚这一点,但正如你所说,我缺乏声誉。很抱歉。
    • 定位 ES6 与它无关,这是一个语法糖设置。您需要指定 ES6 承诺功能是正确的类型,您可以通过在 lib 中包含 ES2015.Promise 来执行此操作,或者在 ES6 中包含所有 ES6,这是针对 ES6 默认执行的操作
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2018-11-26
    • 1970-01-01
    • 2017-10-03
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多