当自动循环时,console.log() 显示为“已取消”

7

我能在VS Code中复现我在Node项目中遇到的问题,具体如下:

for (let i=0; i<50; i++) {
  let text = [ Math.random()>0.5 ? "abc" : "ABC" ];
  console.log(i);
  console.log(text);
  console.log("*")
}

如果我手动逐步运行,一切正常。

如果我让脚本以全速运行,在某个随机迭代中,红色的“已取消”单词会在第一个 console.log 输出其结果后被打印。从那时起,第二个 console.log(text) 要么被跳过,要么输出空字符串(无法确定)。

另外两个console.log()语句继续输出正确的值直到循环结束。

"已取消"的颜色与我的console.error()输出相同。

示例运行如下图所示,其中异常发生在第七次迭代之后:

enter image description here

我多次重复运行该脚本,每次“已取消”输出都发生在不同的迭代中。如果脚本中任何位置有断点,不一定在循环中,则不会发生“已取消”情况。

尽管有错误输出,所有变量的值似乎都是正确的。在我的实际代码中,我将text的最终值保存到文件中,并进行了正确的验证。

这是什么情况,有什么需要担心的吗?


1
在VSCode开发者工具中是否有任何可疑的东西? - lastr2d2
我无法重现“已取消”输出,我觉得在调试器中步进时显示了“text”,但是在没有断点的情况下运行时没有记录任何内容很奇怪,如果您使用“console.log(text[0]);”始终会有一个输出。 - rioV8
@rioV8 是的,如果我把它改成text[0],那么就没有异常了。 - Old Geezer
2个回答

4

我有同样的问题。我认为这是一种VSCode的bug。
当我在事件回调中打印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

我发现有人遇到了类似的问题。
打印数组时,node.js控制台输出行为奇怪

调试控制台有可能显示记录的数组变量的层次结构,而PowerShell则可以获得变量的完整文本转储。我认为它在调试输出中遵循不同的路径。 - rioV8

0
解决方案: Than的答案 没有这些设置,问题依旧存在。
{
  let values1 = [0, 1, 5, 10, 15];
  console.log(values1);
  console.log(values1);
  console.log(values1);
  console.log('====');
  values1.forEach((item, index, array) => {
    console.log(item);
    console.log(index);
    console.log(array);
    console.log('===');
  })
}

在 vscode 的 node.js 环境中,输出为:
(5) [0, 1, 5, 10, 15]
====
0
0
===
1
1
===
5
2
===
10
3
===
15
4
===

当在浏览器中时,期望输出:

Array(5) [ 0, 1, 5, 10, 15 ]
Array(5) [ 0, 1, 5, 10, 15 ]
Array(5) [ 0, 1, 5, 10, 15 ]
==== 
0 
0 
Array(5) [ 0, 1, 5, 10, 15 ]
=== 
1 
1 
Array(5) [ 0, 1, 5, 10, 15 ]
=== 
5 
2 
Array(5) [ 0, 1, 5, 10, 15 ]

=== 
10
3
Array(5) [ 0, 1, 5, 10, 15 ]

===
15 
4 
Array(5) [ 0, 1, 5, 10, 15 ]

=== 

我们不关心浏览器显示什么,当您使用Than解决方案时,VSC会显示什么? - rioV8
@rioV8 我提供了更多的这个 bug 实例,没有使用 Than 的解决方案,但实际上,即使是 [ "outputCapture": "avbsasdadfwaq"] 也可以修复这个 bug。我搜索了一下,这显然是一个 bug,或者是一个令人困惑的功能,我找不到任何微软必要的官方说明。 - T.Worm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接