Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2021, 09:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Тест работы с потоками sdtin и stdout
Читаю книжку по потокам... Там первым же примером есть такой код

process.stdin.setEncoding('utf8')

process.stdin.on('readable', function() {
	var input = process.stdin.read();
	if (input !== null) {
		process.stdout.write(input)
		var command = input.trim();
		if (command == 'exit') {
			process.exit(0);
		}
	}
})


Автор уверяет что процесс завершится если с клавиатуры набрать exit.
У меня же все завершается при вводе любой строки. Т.е. происходит ожидание только "первой порции" из потока, обработка и конец программы...

Запускаю так
node tmp.js

Далее набор символов и нажимаю Enter.
Происходит вывод введенного мной и программа завершается.

Вот меня и заинтересовали такие моменты:
- Почему сначала ожидание события есть, а после ввода его уже нет?
- Может в примере чего-то не хватает?
Ответить с цитированием
  #2 (permalink)  
Старый 19.05.2021, 11:34
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

process.stdin.setEncoding('utf8')
process.stdin.on('data', function(input) {
    if (input !== null) {
        process.stdout.write(input)
        if ( input.trim() === 'exit') {
            process.exit(0);
        }
    }
})

вариант
а что за книга?
Ответить с цитированием
  #3 (permalink)  
Старый 19.05.2021, 12:08
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Vlasenko Fedor
а что за книга?
Вот эта
https://ru.pdfdrive.com/Изучае...182019825.html

Сообщение от Vlasenko Fedor
вариант
Т.е. это разные события ведут себя по разному?
Ответить с цитированием
  #4 (permalink)  
Старый 19.05.2021, 12:37
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Точнне там EventEmitter
подписываемся и ждем события
если нет подписчиков выходим
Здесь есть больше примеров
Ответить с цитированием
  #5 (permalink)  
Старый 19.05.2021, 14:17
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от Vlasenko Fedor
Точнне там EventEmitter
подписываемся и ждем события
если нет подписчиков выходим
Так и в "книжном" примере все так же... Но "ждет" только до первого срабатывания события.

Сообщение от Vlasenko Fedor
Здесь есть больше примеров
Спасибо, обязательно просмотрю. Может и книжечку какую подсоветуешь почитать?
Ответить с цитированием
  #6 (permalink)  
Старый 19.05.2021, 14:43
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Я на телеграм каналах вишу по книгам
https://t.me/bzd_channel
https://t.me/physics_lib
там есть поиск
из последнего, что понравилось
Шаблоны проектирования Node.js / пер. с анг. А. Н. Киселева. – М.: ДМК Пресс,
2017. – 396 с.: ил.
Олимпиадное программирование. / пер. с англ. А. А. Слинкин – М.:
ДМК Пресс, 2018. – 300 с.: ил.
пусть не пугает название последней, подробно и просто разложены решения задач
Ответить с цитированием
  #7 (permalink)  
Старый 19.05.2021, 15:14
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

ksa,
ещё важно понимать для какой версии Node.js написан учебник. Всё меняется каждые 6 месяцев.
process.stdin.setEncoding('utf8')

process.stdin.on('readable', function() {
  var input = process.stdin.read();
  if (input !== null) {
    process.stdout.write(input);
    var command = input.trim();
    if (command == 'exit') {
      process.exit(0);
    }
    process.stdin.resume()
  }
})
Ответить с цитированием
  #8 (permalink)  
Старый 19.05.2021, 15:42
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Vlasenko Fedor, спасибо еще раз.

Сообщение от destus
ещё важно понимать для какой версии Node.js написан учебник
Он издан 2017...
А тренируюсь на Ноде "последней".
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Старший веб-разработчик с опытом работы с React.js SvetlanaRyabunina Работа 0 06.05.2016 10:37