Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2020, 20:49
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

Как остановить бесконечный цикл
Есть такой кусок кода
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 не подходит так как он полностью тушит программу, а мне бы хотелось только выйти из этого цикла

Последний раз редактировалось Telnet, 10.03.2020 в 20:53.
Ответить с цитированием
  #2 (permalink)  
Старый 10.03.2020, 23:42
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

https://developer.mozilla.org/ru/doc...atements/break
https://learn.javascript.ru/keyboard-events
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2020, 19:15
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

Таймер работает и каждую секунду выводит сколько уже прошло.
Но после запуска вообще перестает реагировать на любые кнопки с клавиатуры, даже 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);
}

Последний раз редактировалось Telnet, 11.03.2020 в 19:20.
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2020, 20:29
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

вот пример бесконечного цикла не блокирующего 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()
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать бесконечный скролл (redux)? darktowerk56c Элементы интерфейса 0 08.10.2019 19:03
Как правильно сделать бесконечный скролл с автоматической загрузкой контента (React.j darktowerk56c Элементы интерфейса 1 07.10.2019 15:56
Как остановить рекурсивную функцию по клику? Lutidza Общие вопросы Javascript 7 23.01.2016 16:41
Как остановить выполнение яваскрипта ? Serjuk AJAX и COMET 20 17.06.2012 22:32
бесконечный цикл вызова torquemada jQuery 12 17.04.2010 21:58