Node.js 在NodeJS的引擎盖下,可读的位置和方式。\u read()正在被调用?
我对下面的程序很好奇。这个程序只在消费者请求时才将字母“a”到“z”推送到可读的流中。我从文档中了解到,Node.js 在NodeJS的引擎盖下,可读的位置和方式。\u read()正在被调用?,node.js,nodejs-stream,Node.js,Nodejs Stream,我对下面的程序很好奇。这个程序只在消费者请求时才将字母“a”到“z”推送到可读的流中。我从文档中了解到,\u read()实现是由内部Readable类方法调用的。如果您使用命令node app.js | head-c5从终端运行此程序,那么我们可以看到当我们只请求5个字节时,\u read()只被调用了5次,因此它只打印abcde 我想知道这个\u read()实现在节点源代码中的何处被调用?。或者,当我们请求5字节的数据时,节点中的哪个源代码\u read()被调用了5次 我很想知道这一点,
\u read()
实现是由内部Readable
类方法调用的。如果您使用命令node app.js | head-c5
从终端运行此程序,那么我们可以看到当我们只请求5个字节时,\u read()
只被调用了5次,因此它只打印abcde
我想知道这个\u read()
实现在节点源代码中的何处被调用?。或者,当我们请求5字节的数据时,节点中的哪个源代码\u read()
被调用了5次
我很想知道这一点,如果有人能帮我弄明白,那就太好了
var Readable = require('stream').Readable;
var rs = Readable();
var c = 97 - 1;
rs._read = function () {
if (c >= 'z'.charCodeAt(0)) return rs.push(null);
setTimeout(function () {
rs.push(String.fromCharCode(++c));
}, 100);
};
rs.pipe(process.stdout);
process.on('exit', function () {
console.error('\n_read() called ' + (c - 97) + ' times');
});
process.stdout.on('error', process.exit);
管道功能是触发点
- 调用
函数时,会触发pipe
事件on('data',…)
- 此事件使用
实现提取流的数据\u read
- 现在,您的可读流已经填充了数据
head
命令
- 该命令查找输出util
字符。比如说-c
一旦打印了5个字符,它就会发出信号,指示上一个进程退出head-c5
- 收到此信号后,节点进程运行退出功能并终止,因此停止进一步执行
,并打印在此之前读取的字符数\u read
我可以知道您是如何在VS代码中获取此Stacktrace的。请跟踪并在VSCode调试窗格中查找“调用堆栈”。由于“node app.js | head-c5”命令,我的_read()实现只调用了5次,这意味着它只将5字节的数据推入缓冲区。因此,我们只得到“abcde”作为输出。但我的假设是,在节点源代码中的某个地方有一个循环,在这种情况下它只会迭代5次,并且只将5个字节的数据推入缓冲区。所以我希望在源代码中的某个地方有这样的代码。