写一个nodejs的脚本,F5一跑就出错,重点是也不提示出错原因和地址,也可能是我不会看,总之我的脚本是被require,然后是在内部模块vm.js里:
function createScript(code, options) {
return new Script(code, options);
}
这段去new Script的时候把我的整个脚本加载进去,然后提示:
发生异常: SyntaxError
SyntaxError: Unexpected identifier
at createScript (vm.js:74:10)
at Object.runInThisContext (vm.js:116:10)
at Module._compile (module.js:537:28)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Module.require (module.js:517:17)
at require (internal/module.js:11:18)
由于没有提示原因,就只能逐段注释,最后定位到使用await的一句,但是函数已经是async了,看了半天只能把怀疑对象放到在它上一句的foreach上,上网一查果然有蹊跷:
async/await 语法糖本身就是为了避免回调函数这种“不直观”的逻辑,将异步回调转成同步顺序执行,从而使得代码符合直观的理解。而用 forEach/map/reduce 代替for循环,则正是利用回调函数的语法,牺牲代码的直观性,提升代码的简洁性。
另一个角度await后面要接的是异步操作,而foreach是同步操作并发操作,也就是说无论await是在foreach里面还是await后面接foreach都不行
参考连接:
1:https://www.zhihu.com/question/53466898/answer/259826558
2:http://www.ruanyifeng.com/blog/2015/05/async.html –【六、注意点】