Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 15

Как остановить бесконечный цикл

10.03.2020, 21:01. Показов 3847. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой кусок кода
JavaScript
1
2
3
4
5
6
7
8
9
10
let run = true
while (run){
   await page.waitFor(1000);
   timer++;
   console.log('timer',timer);
   //тут необходимо как то отследить пользовательский ввод и если он произошел то run = false;
   if(input == true){
        run = false;
   }
}
Как мне сделать так что б скажем по нажатию на Enter или Esc
run = false;
и цикл бы останавливался
Ctrl + C не подходит так как он полностью тушит программу, а мне бы хотелось только выйти из этого цикла
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.03.2020, 21:01
Ответы с готовыми решениями:

Как остановить бесконечный цикл?
У меня есть скрипт, который отслеживает, запущен ли процесс, и если программа закрывается, то запускает её по новой. Как можно прекратить...

Как остановить бесконечный цикл?!
Написал программу, ошибся, и она запустила бесконечный цикл. На что нажать (на клавиатуре) что бы его остоновить? :(

Как остановить по ошибке запущенный бесконечный цикл while?
Длительное время работаю с php но ранее не сталкивался с подобной ситуацией, когда по ошибке был запущен бесконечный цикл while. Код...

5
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
11.03.2020, 07:32
Цитата Сообщение от vipTelnet Посмотреть сообщение
что б скажем по нажатию на Enter или Esc
перед вызовом цикла ты должен запустить "обработчик клавиш". Там получаешь коды всех нажатых клавиш. И обрабатываешь нужные...

лови кусок одного из моих проектов... нужен модуль keypress
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    var keypress = require('keypress');
    keypress(process.stdin);
    process.stdin.on('keypress', function (ch, key) {
        
        if (key && key.ctrl && key.name == 'c') { return; }
        
        if (key && key.name == 'return') { app_terminate(); }
        if (key && key.name == 'escape') { app_terminate(); }
        if (key && key.name == 'space') { app_terminate(); }
        if (key && key.name == 'q') { app_terminate(); }
        
        console.log('got "keypress"');
        console.log(key);
    });
    process.stdin.setRawMode(true);
    process.stdin.resume();
0
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 15
11.03.2020, 19:20  [ТС]
У меня лично такой вот пример после запуска вообще перестает реагировать на любые кнопки с клавиатуры, даже Ctrl + C не срабатывает, помогает только перезагрузка консоли.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
let keypress = require('keypress');
let run = true;
let timer = 0;
 
// make `process.stdin` begin emitting "keypress" events
keypress(process.stdin);
 
// listen for the "keypress" event
process.stdin.on('keypress', function (ch, key) {
  console.log('got "keypress"', key);
});
 
process.stdin.setRawMode(true);
process.stdin.resume();
 
const msleep = (milliSeconds) =>
    Atomics.wait(
        new Int32Array(new SharedArrayBuffer(4)),
        0, 0, milliSeconds
    )
;
 
while (run){
    msleep(1000);
    timer++;
    console.log('timer',timer);
}
0
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
12.03.2020, 06:56
Цитата Сообщение от vipTelnet Посмотреть сообщение
после запуска вообще перестает реагировать
лень тестировать (создавать пустой проект). Если что-то не работает - разбей на части.
1) пустой проект (без цикла) зависает?
2) клавиатура работает без цикла?
3) если все дело в цикле - значит его надо переделать. возможно ты заблокировал EventLoop (недавно нашел в ютюбе неплохое пояснение принципов). Суть - пока работает "тело цикла" - другим операциям не достается "возможность поуправлять". Надо разорвать цикл на назависимые колбэки.

например (грубое решение)

JavaScript
1
2
3
4
function next(){
   msleep... старое "тело"
   setInterval(next)
}
0
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 15
14.03.2020, 20:37  [ТС]
вот пример бесконечного цикла не блокирующего Event loop
Выход из цикла while по нажатию на кнопку Esc
Выход из программы по нажатию по Ctrl + c

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const readline = require('readline');
const sleep = require('await-sleep');
let run = true;
let timer = 0;
 
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
 
process.stdin.on('keypress', (str, key) => {
    console.log(str, key, run);
    // Conditions on key
    if(key.name == 'escape'){
        run = false;
    }  
    if(key.name == 'c' && key.ctrl == true){
        process.exit(1);
    }
})
 
async function init(){
    while (run){
        await sleep(1000);
        timer++;
        console.log('timer',timer);
    }
}
init()
0
 Аватар для Hastin
40 / 32 / 7
Регистрация: 24.03.2016
Сообщений: 270
30.03.2020, 13:25
Вы используете puppeteer или nightmare?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2020, 13:25
Помогаю со студенческими работами здесь

Как проще остановить бесконечный цикл, в котором есть пауза?
В общем столкнулся с такой задачей. При клике на Button1, запускается цикл, который должен прерываться по клику на Button2. Если в цикле...

Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор?
Допустим есть цикл: while (1) { ... } Как сделать так, чтобы бесконечный цикл не грузил процессор. Избавиться от...

Как сделать бесконечный цикл?
Помогите переделать код так, чтобы после угадывания слова код предлагал сыграть в игру снова, а не просто заканчивал работу. Буду очень...

Как прекратить бесконечный цикл?
Здравствуйте, нужна помощь. Цель: сделать пульт управления 7-ми сегментным индикатором из 4х кнопок: 1 кнопка-вывод на левом индикаторе ...

Бесконечный цикл или как?
Товарищи, подскажите, как лучше реализовать. К примеру есть таблица `table` id_a | id_b 1 | 0 2 | 1 3 | 2 4 | 1 5 | 3 6...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru