流和事件循环 - 数据处理程序是否总是在下一个滴答时触发?
Streams and event loop - do data handlers always fire on next tick?
假设我有一个可读流,如下所示:
const strm = fs.createReadStream(file);
strm.on('data', function onData(d){});
我的问题是,onData
回调是否会在事件循环的下一个节拍中触发?或者 onData
处理程序是否可以在事件循环的同一滴答中被调用两次?
数据处理程序可以在事件循环的同一时刻触发多次,请参阅:
https://github.com/nodejs/help/issues/1222
Yes:
const stream = require('stream');
const readable = new stream.Readable({read(){}});
readable.on('data', () => console.log('data'));
process.nextTick(() => console.log('next tick'));
readable.push('foo');
readable.push('foo');
Output:
data data next tick
假设我有一个可读流,如下所示:
const strm = fs.createReadStream(file);
strm.on('data', function onData(d){});
我的问题是,onData
回调是否会在事件循环的下一个节拍中触发?或者 onData
处理程序是否可以在事件循环的同一滴答中被调用两次?
数据处理程序可以在事件循环的同一时刻触发多次,请参阅:
https://github.com/nodejs/help/issues/1222
Yes:
const stream = require('stream');
const readable = new stream.Readable({read(){}});
readable.on('data', () => console.log('data'));
process.nextTick(() => console.log('next tick'));
readable.push('foo');
readable.push('foo');
Output:
data data next tick