Разница b/w event.on() и event.once() в nodejs

Я тестирую приложение plus_one, и во время его запуска я просто хотел прояснить свои концепции в event.once() и event.on()

Это plus_one.js

> process.stdin.resume();
process.stdin.on('data',function(data){
    var number;
    try{
        number=parseInt(data.toString(),10);
        number+=1;
        process.stdout.write(number+"\n");
        }
    catch(err){
        process.stderr.write(err.message+"\n");
        }
    });

и это test_plus_one.js

var spawn=require('child_process').spawn;
var child=spawn('node',['plus_one.js']);

setInterval(function(){
    var number=Math.floor(Math.random()*10000);
    child.stdin.write(number+"\n");
    child.stdout.on('data',function(data){
        console.log('child replied to '+number+' with '+data);
        });
    },1000);

При использовании child.stdin.on() появляется несколько предупреждений о смещении maxlistener, но это не так, когда используется child.stdin.once(), почему это происходит?

Это потому, что child.stdin слушает предыдущие входы? но в этом случае смещение maxlistener должно устанавливаться более часто, но это происходит только один или два раза в минуту.

Ответы

Ответ 1

Используя EventEmitter.on(), вы присоединяете полный прослушиватель, а когда вы используете EventEmitter.once(), это одноразовый прослушиватель, который будет отсоединен после стрельбы один раз. Слушатели, которые только один раз стреляют, не учитывают максимальное количество слушателей.