小虾虎鱼

小虾虎鱼

如何在vscode中调试async函数

作者 禾惠 发表于 2016/11/23 10:03 ,最后修改于 2016/11/23 10:13

都知道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函数,可以下载最新版本试试。

我欣赏你的好品味~

打开支付宝扫一扫