2016-10-13 14 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

相關問題