Сложность с событиями - PullRequest
0 голосов
/ 02 апреля 2019

У меня проблемы с пониманием событий.Всякий раз, когда я вижу пример кода с событиями, я не могу найти их документацию, просто в состоянии понять тестирование.В этом коде, например, я понял 'SIGINT' тестированием, но не нашел документации.«Конец» Я не смог найти документацию, а также не могу понять, когда будет уволен «Конец».Что происходит с этими событиями?Почему так много проблем с поиском документации?Являются ли события контекстными?Как узнать контекст и где искать?Спасибо и извините за глупый вопрос.

const fs = require('fs');

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', inputStdin => { inputString
    inputString += inputStdin;
});

process.stdin.on('end', function() {
    inputString = inputString.replace(/\s*$/, '')
        .split('\n')
        .map(str => str.replace(/\s*$/, ''));

    main();
});

1 Ответ

0 голосов
/ 03 апреля 2019

Это документация потоков: https://millermedeiros.github.io/mdoc/examples/node_api/doc/streams.html

Вы можете видеть, что stdin - это Stream: https://nodejs.org/api/process.html#process_process_stdin

Итак, все, что относится к Stream, относится и к stdin.

событие данных:

Событие data генерирует либо Buffer (по умолчанию), либо строку, если setEncoding () был использован.

Итак, событие data загружает порцию данных из Stream в буфер или строку.

конечное событие:

Издается, когда поток получил EOF (FIN в терминологии TCP). Указывает на то, что больше никаких событий «данных» не произойдет. Если поток также доступно для записи, возможно, можно продолжать писать.

Итак, конечное событие инициируется, что неудивительно, когда произошло последнее событие данных.

Чтобы объяснить это, давайте предположим, что у вас есть поток файла размером 2 ГБ. В этом случае куски данных загружаются из этого файла, давайте предположим, что размер кусков равен S. В этом случае у вас будет около 2 ГБ / с шагов загрузки. Это означает, что будет много событий данных, и система всегда будет запускать событие данных, пока есть следующий пакет для загрузки. В конце, когда больше нечего загружать, запускается конечное событие. Теперь, когда мы понимаем Streams, я думаю, что вы теперь понимаете, что то же самое происходит и с stdin. Ничто не препятствует тому, чтобы stdin внезапно получил очень большой объем данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...