Как остановить бесконечный цикл
Есть такой кусок кода
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, время: 18:44. |