首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >滚动控制台窗口时Node.js停止

滚动控制台窗口时Node.js停止
EN

Stack Overflow用户
提问于 2018-01-03 06:34:53
回答 3查看 640关注 0票数 4

如果您在Windows (至少8个)下运行Node.js中的以下脚本

代码语言:javascript
复制
const init = +new Date;
setInterval(() => {
    console.log(+new Date - init);
}, 1000);

并拖动控制台窗口的滚动条,脚本的输出类似于

代码语言:javascript
复制
1001
2003  // long drag here
12368 // its result
13370
14372

看起来Node.js的事件循环在滚动过程中暂停了。同样的事情也应该发生在http包中的异步操作上。因此,留下一个可见的终端窗口对正在运行的服务器是危险的。

如何更改代码以避免此类行为?

EN

回答 3

Stack Overflow用户

发布于 2018-01-10 16:21:00

滚动或选择文本时,NodeJS不会停止。将数据发送到stdout的唯一函数被暂停。在您的服务器中,您可以将日志数据发送到文件,这样您的服务器就不会停止。

例如,请参阅以下代码:

代码语言:javascript
复制
const init = +new Date;
var str=''
setInterval(() => {
    x=(+new Date - init).toString();;
    str+=x + '\n'
}, 1000);

setTimeout(function(){
    console.log(str)
},5000)

我在前5秒内选择了文本,结果如下:

代码语言:javascript
复制
C:\me>node a
1002
2002
3002
4003

你可以看到没有“暂停”。

如您所见,第一个事件循环setInterval没有停止,因为里面没有console.log

现在,当您使用输出文件进行日志记录时,您可以使用tail -f查看实时日志。这将显示输出文件中的每个新行。

票数 7
EN

Stack Overflow用户

发布于 2018-01-04 11:46:00

当你在控制台中滚动或点击时,你的控制台实际上是暂停的,因为它正在进入选择模式。看看标题栏,当它暂停的时候,它可能会显示select。

要防止此行为,请编辑命令提示符的属性,并取消选择“快速编辑模式”。

票数 5
EN

Stack Overflow用户

发布于 2019-06-11 03:06:28

如果您想让您的console.log和console.error在所有平台上始终是异步的,可以使用fs.write to fd1 (stdout)或fd2 (stderr)来实现。

代码语言:javascript
复制
const fs = require('fs')
const util = require('util')

// used by console.log
process.stdout.write = function write (str) {
  fs.write(1, str, ()=>{})
}

// used by console.error
process.stderr.write = function write (str) {
  fs.write(2, str, ()=>{})
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48068773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档