如何在vscode中调试async函数
都知道Node 7.0默认没有开启ES7的Async
函数,需要启用该函数必须在启动命令中添加--harmony_async_await
参数,如:node --harmony_async_await index.js
。
注意:
--harmony_async_await
参数必须在index.js
前面。
如果需要在VScode中启动或者调试Async
函数,如何配置launch.json文件呢?
默认生成的launch.json文件
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceRoot}\\index.js",
"cwd": "${workspaceRoot}"
}
]
}
添加启动参数
从vscode官方文档中了解到,如果需要添加启动参数,则只需要添加一个args
属性,所以配置如下:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceRoot}\\index.js",
"cwd": "${workspaceRoot}",
"args": ["--harmony_async_await"]
}
]
}
启动调试后,会发现程序报错了,如下:
node --debug-brk=19499 --nolazy index.js --harmony_async_await
Debugger listening on 127.0.0.1:19499
d:\dev\async-await\index.js:9
(async function () {
^^^^^^^^
SyntaxError: Unexpected token function
at Object.exports.runInThisContext (vm.js:78:16)
at Module._compile (module.js:545:28)
at Object.Module._extensions..js (module.js:582:10)
at Module.load (module.js:490:32)
at tryModuleLoad (module.js:449:12)
at Function.Module._load (module.js:441:3)
at Timeout.Module.runMain [as _onTimeout] (module.js:607:10)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5)
还记不记得文章开头有一段注意项,--harmony_async_await
参数必须要在index.js
前面,于是报错的原因就很容易知道了:是参数的顺序问题。那应该如何让index.js
在最后面呢?
正确的设置
--harmony_async_await
参数如果把index.js
当做参数来设置,会是怎样?
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
//"program": "${workspaceRoot}\\index.js",
"cwd": "${workspaceRoot}",
"args": ["--harmony_async_await", "index.js"]
}
]
}
启动调试,日志显示:
node --debug-brk=47146 --nolazy --harmony_async_await index.js
Debugger listening on 127.0.0.1:47146
OK了,一切正常了。
提示:如果你的vscode不能调试
Async
函数,可以下载最新版本试试。