我在TypeScript 2.4.1,Node.js v8.1.3和VS Code 1.14.0上遇到了一些问题。
出于某种原因,我的实验代码没有按顺序打印。特别是休息和预备部分。
这是我的测试页。
我在这里错过了什么吗?
GggDataStructuresIntTests.ts
var dotdotdotFun = function () {
let [first, ...rest] = [1, 2, 3, 4, 5];
console.log("first", first); // outputs 1
console.log("rest", rest); // outputs [ 2, 3, 4 ]
rest.forEach((item) => {
console.log("forEach", item);
});
}
dotdotdotFun();
tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"outDir": "js/",
"sourceMap": true,
"lib": [ "es2015" ],
"watch": true
},
"exclude": [
"node_modules",
"typings/browser.d.ts",
"typings/browser"
]
}
launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Node.js",
"program": "${file}",
"outFiles": [
"${workspaceRoot}/js/**/*.js"
]
}
]
}
有一些输出;
输出1:
输出2:
输出3:
答案 0 :(得分:1)
在Yeshan Jay评论之后,我通过Node.js v8.2.0 Documentation对console.log()进行了更多研究。
如下所示:
<强>控制台
警告:全局控制台对象的方法既不一致 同步就像它们类似的浏览器API,也不是 像所有其他Node.js流一样异步。见说明 在process I/O for更多信息。
所以看起来它根本不是TypeScript编译器的错误。 (我查了编译JS,一切都很好)。由于我是通过Node.js引擎运行编译的js,因此问题从那一刻开始。这就是为什么问题无法在浏览器级别重现的原因。
我没有检查上一代节点引擎,但是在这个新版本(&gt; = 8)上,似乎不应该将console.log()视为同步。