2017-02-23 107 views
3

我有下面的代碼片段在打字稿:__awaiter沒有定義/等待在打字稿

nsp.on('connection', async function (socket) { 
    await this.emitInitialPackage(nsp, currentLine, currentCell); 
} 

emitInitialPackage(nsp: any, name: string, cell: any) { 
    return db.Line.find({ 
     where: { 
      name: name, 
      CellId: cell 
     } 
    }).then(results => { 
     nsp.emit('value', results); 
    }).catch(err => console.log(err)); 
} 

然而,當這編譯(V2.2.1)並運行,我得到以下錯誤:

Uncaught ReferenceError: __awaiter is not defined

這是什麼意思?我如何獲得預期的功能?

更新:

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "allowSyntheticDefaultImports": true, 
    "sourceMap": true, 
    "noEmitHelpers": true, 
    "strictNullChecks": false, 
    "lib": [ 
     "dom", 
     "es2015.promise", 
     "es5" 
    ], 
    "types": [ 
     "node", 
     "express" 
    ] 
    }, 
    "exclude": [ 
    "node_modules", 
    "dist" 
    ] 
} 
+0

你能分享你的'tsconfig.json'?以及您用來編譯代碼的命令。 – Romain

+0

@Romain當然 - [這裏](https://gist.github.com/georgeedwards/755fd6a6561a245bac55bf51b8493a51)就是tsconfig,我只用'tsc -w'從tsconfig目錄下運行它。 –

+0

如果發佈的答案可解決您的問題,請將其標記爲已接受 – Romain

回答

4

當你在你的情況async/await使用從JavaScript(ES6及以後)像的未來版本的一些功能,TypeScript生成的輔助函數。這些輔助函數用於提供ES5代碼的新功能,因此可以在Web瀏覽器中運行。

您的問題:

在你tsconfig.json您設置的noEmitHelperstrue。通過這樣做,你告訴TypeScript編譯器,你將自己提供這些輔助函數。

如何解決此問題:

  • 您可以設置noEmitHelpers價值falsetsconfig.json,從而在需要時TypeScript編譯器將發出的輔助功能。這種方法的一個缺點是,如果在兩個不同的文件中使用例如async/await,輔助函數將被髮射2次(每個文件一個)。
  • 另一種解決方法是在使用tsc時設置--importHelpers標誌。它會告訴TypeScript編譯器只包含一次輔助函數。

你的情況:tsc --importHelpers -w