2016-10-13 13 views
3

我已经加入类似于我的项目下面的一些代码:如何在定位Safari时使用TypeScript(angular2)中的await/async?

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; 

我需要做什么才能在使用Typescript的Safari中使用异步/等待?

回答

6

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

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

UPDATE:从TypeScript 2.1开始,您可以在定位ES5时使用async/await

+0

在旧的(safari 9)浏览器中不工作是一个问题。我要去看看巴贝尔。谢谢。 – nycynik

+0

您仍然可以使用带有“target”:“es5”的TypeScript,但是您将无法使用async/await。这是计划于11月发布的TypeScript 2.1版本。 – Dyna

+0

没错。当我尝试es5时,我注意到它在safari中停止工作,并且我确信它在其他文件中也被破坏了。 – nycynik

4

1)确保你有TypeScript 2.1。定位ES5时,早期版本不完全支持async await

2)为了使Promise在ES5有效,遵循这个问题的答案接受的指令:TypeScript Promise TS2304 TS2529

相关问题