Как остановить бесконечный цикл
Есть такой кусок кода
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 не подходит так как он полностью тушит программу, а мне бы хотелось только выйти из этого цикла |
|
Таймер работает и каждую секунду выводит сколько уже прошло.
Но после запуска вообще перестает реагировать на любые кнопки с клавиатуры, даже Ctrl + C не срабатывает, помогает только перезагрузка консоли. 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); } |
вот пример бесконечного цикла не блокирующего Event loop
Выход из цикла while по нажатию на кнопку Esc Выход из программы по нажатию по Ctrl + c 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() |
Часовой пояс GMT +3, время: 04:16. |