微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

打印数组时奇怪的node.js console.log输出行为

如何解决打印数组时奇怪的node.js console.log输出行为

我在node.js v14.13.1环境中运行的VSCode(Mac OS)中有以下一些简单的代码

let fruits = ['Apple','Banana'];
let fruits1 = ['Apple1','Banana1'];
console.log(fruits);
console.log(fruits1);

输出行为对我来说似乎很奇怪,它可以打印:

(2) ['Apple','Banana']

(2) ['Apple','Banana']
(2) ['Apple1','Banana1']

(2) ['Apple','Banana']
Canceled

我找不到任何特定的打印模式(除了前三个输出比第三个输出更多地打印),因此似乎“随机决定”输出什么。

但是,通过Mac终端(node my_file.js)执行时,此代码始终按预期输出,即:

[ 'Apple','Banana' ]
[ 'Apple1','Banana1' ]

是某种VSCode错误,还是用console.log()打印数组(用字符串和整数工作就可以了)是我不考虑的吗?

解决方法

您可以尝试的一种解决方案是在执行 console.log 命令时将数组转换为字符串:

let fruits = [['Apple','Banana'],['Apple','Banana']];
console.log(fruits.toString());  // Apple,Banana,Apple,Banana
console.log('' + fruits);  // Apple,Banana
console.log(JSON.stringify(fruits));  // [["Apple","Banana"],["Apple","Banana"]]

我喜欢最后一个,因为即使是多维数组,它也能将这个数组显示在括号内。

然而,我发现的一个问题是在使用正则表达式时,转换为字符串时会丢失附加输出:

let str = 'xyz';
let pat = /y/;
let res = str.match(pat);
console.log(res);  // ['y',index: 1,input: 'xyz',groups: undefined]
console.log(res.toString());  // y
console.log('' + res);  // y
console.log(JSON.stringify(res));  // ["y"]

我相信这个错误可能是因为调试器在输出发送到调试控制台之前停止了?因此对于另一种解决方案,要么在代码末尾添加一个空行并在那里添加一个断点;这似乎允许在数组上执行多个 console.logs 时生成所有输出。或者,在代码末尾添加:

setTimeout(() => { },1000)

这似乎也增加了足够的时间来正确输出数组的所有 console.log。前者的优点是,您可以在调试控制台中展开数组详细信息,直到您继续到代码的末尾,但缺点是您仍然必须选择继续代码才能结束。后者还允许您在输出中扩展对象的详细信息,但仅限于计时器的持续时间。

我还发现,您可以将其中任何一个添加到您的 launch.json 文件中(在适当的节点配置对象中,并且不要忘记在行的末尾和/或末尾添加一个公共这些行中的任何一行取决于您插入的位置):

"console": "integratedTerminal"

或者:

"console": "externalTerminal"

这些将输出发送到 VS Code 终端窗格或外部 cmd 窗口。

最后我还发现,您可以将其添加到launch.json:

"outputCapture": "std"

这会将输出保留在调试控制台中。颜色和其他一些消息看起来有点不同,但似乎成功输出数组。

,

这似乎很有趣。我尝试多次运行它,并得到与Chrome控制台输出相同的结果:

["Apple","Banana"]
["Apple1","Banana1"]

该问题可能与您在计算机上运行的Node.js版本或您所拥有的VSCode版本的终端有关。

因为我尝试从VSCode终端运行它并获得了相同的结果:

Here is the screen shot

,

我也有同样的问题。我认为这是某种 VSCode 错误。
当我在事件回调中打印 data 时,console.log 的行为符合预期。但是过了一会儿,主线程存在并且console.log输出Canceled

import some modules...

vtgeojson(tiles,{ tilesOnly: true })
  .on('data',function (data) {
    featurecollection.features.push(data);
    console.log(data)
  })
  .on('end',function () {
    console.log(featurecollection);
    console.log(featurecollection.features.length);
  })

enter image description here

当我设置断点并逐行打印 data 时,问题就消失了。

当我在 powershell 中运行脚本时,问题也消失了。

enter image description here

虽然取消了 console.log,但是 data 已经成功推入了 feature list。该行为很可能是由 vscode 终端或 vscode 处理 console.log 命令的方式引起的。

我的node版本是v12.20.0,VSCode版本是:

Version: 1.51.1 (system setup)
Commit: e5a624b788d92b8d34d1392e4c4d9789406efe8f
Date: 2020-11-10T23:34:32.027Z
Electron: 9.3.3
Chrome: 83.0.4103.122
Node.js: 12.14.1
V8: 8.3.110.13-electron.0
OS: Windows_NT x64 10.0.17763

我发现其他人也有类似的问题。
console.log() is “Canceled” when looping unattended

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。