備忘録

備忘録

Node.js + TypeScript + puppeteerでevaluateを非同期で利用する方法

Ⅰ. はじめに

TypeScriptのようなAltJSで以下のコードを実行すると、以下のエラーが出力されます。

await page.goto('http://example.com')
let str = await page.evaluate(async () => {
  let res = await window.fetch('http://example.com')
  return await res.text()
})
console.log(str)
UnhandledPromiseRejectionWarning:
  Error: Evaluation failed:
    ReferenceError:
      __awaiter is not defined

解決方法

方法1

引数を文字列として渡す

let str = await page.evaluate(`(async () => {
  let res = await window.fetch('http://example.com/1')
  return await res.text()
})()`)
方法2

トランスパイル先としてECMAScript 2018を指定する
tsconfig.json

{
  "compilerOptions": {
    "target": "es2018"
  } 
}