Вот пример кода, который не сильно отличается от того, что вы можете получить от сети или документации:Node read stream: когда происходит потоковое вещание?
var fs = require('fs');
var r = fs.createReadStream(process.argv[2], { encoding: 'utf8' });
r.on('data', function (chunk) {
console.log("chunk: >>>" + chunk + "<<<");
});
r.on('end', function() {
console.log("This is the end");
});
Что озадачивает меня: когда же потоковое, что триггера события происходят? По-видимому, не прямо на построение потока чтения, потому что тогда это будет сделано, прежде чем мы перейдем к on
s, и код прослушивания событий никогда не будет выполнен (что и получается, это работает отлично).
Что меня беспокоит: есть теоретический шанс, что событие пропущено, если on
вызов приходит слишком поздно?
С первого пункта, это звучит как '«end'' событие может все еще быть потеряны, поскольку поток возобновляется, когда я добавить '» data'' слушателя, и может быть завершена, прежде чем я добавить '' end'' слушатель. Я полагаю, что то, что вы говорите во втором абзаце, предотвращает это, если оба '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '. Но каковы критерии для двух операторов, которые должны выполняться в одном тике? – njlarsson
Это правильно, если вы добавляете слушателя 'data', но не' end' слушателя, вы можете его пропустить. Обновлен ответ – vkurchatkin
Что меня еще пугает, так это то, что критерии для двух операторов должны выполняться в одном тике. Из вашего примера, я полагаю, что 'on' не делает отметку конца, но' setImmediate' делает. Итак, что именно делает тик? Я тоже не мог найти ответ на этот вопрос, хотя я полагаю, что он существует в некоторых очень длинных и глубоких текстах. – njlarsson