【问题标题】:How can I use await/async in TypeScript (angular2) when targeting Safari?以 Safari 为目标时,如何在 TypeScript (angular2) 中使用 await/async?
【发布时间】:2016-10-13 21:20:37
【问题描述】:

我在我的项目中添加了一些类似于以下的代码:

async fun2(): Promise<string> {
  let token: string = null;

  await this.auth.getToken().then(newToken => {
    token = newToken;
  });

  return token;
}

但是,在编译时,我收到警告:

Async functions are only available when targeting ECMAScript 2015 or higher.

当我尝试在 Chrome 中运行该项目时,它运行良好,但在 Safari 中,__awaiter 函数出现错误。

proj.prototype.fun2 = function () {
        return __awaiter(this, void 0, Promise, function * () {
            var token = null;

我需要做什么才能在 Safari 中通过 Typescript 使用 async/await?

【问题讨论】:

    标签: typescript async-await


    【解决方案1】:

    在您的tsconfig.json 中,您需要在compilerOptions 部分设置"target": "es6"。请注意,只有 Safari v10.0 完全符合 ES6,因此您需要使用该版本。您的代码可能无法在其他浏览器中运行,因为它们的ES6/ES2015 支持尚未完成。

    Promise 是 ES2015 的一部分,因此如果切换到 es6 目标,则无需执行任何操作。

    更新:从 TypeScript 2.1 开始,您可以在针对 ES5 时使用 async/await

    【讨论】:

    • 不能在旧版 (safari 9) 浏览器中运行是个问题。我要研究巴别塔。谢谢。
    • 您仍然可以将 TypeScript 与 "target": "es5" 一起使用,但您将无法使用 async/await。计划在 11 月发布的 TypeScript 2.1 版本中使用。
    • 对。当我尝试 es5 时,我注意到它在 safari 中停止工作,我确信它在其他文件中也被破坏了。
    【解决方案2】:

    1) 确保您拥有 TypeScript 2.1。面向 ES5 时,早期版本不完全支持 async await

    2) 要使 Promise 在 ES5 中有效,请按照该问题的已接受答案的说明进行操作:TypeScript Promise TS2304 TS2529

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 2017-07-13
      • 2017-04-26
      • 2020-05-19
      • 2021-01-14
      • 2017-12-30
      • 2016-08-22
      • 1970-01-01
      相关资源
      最近更新 更多