Создать цикл while, который прерывается после определенных попыток - NodeJS - PullRequest
0 голосов
/ 23 мая 2018

Описание

Я пытаюсь написать цикл while для моего монитора API.Цель состоит в том, чтобы вызывать API, пока процент не достигнет 100. Я хочу вызывать его каждые 5 секунд.Обычно через 30 секунд процент достигнет 100%.Я хочу сгенерировать ошибку после 10 попыток, что равно 50 секундам.


Я пытался

let monitor = await Service.monitor(session,taskId);
let percent = JSON.parse(monitor).result[0].data.percent;

let tryCount = 0;
let tryMax = 10;
while (percent < 100 || tryCount < tryMax) {
    setTimeout(function() {
        let percent = JSON.parse(monitor).result[0].data.percent;
        tryCount++;
    }, 5000);

    console.log('in a while loop ',tryCount, percent);

    if(tryCount == 10){
        var err = new Error('Error')
        throw err
    }
}

Результат

У меня так много

in a while loop  0 0
in a while loop  0 0
...
in a while loop  0 0
in a while loop  0 0

Вопрос

Почему мои tryCount продолжают отображаться как 0, а не как приращение?

Как можно создать while-loop, который делает что-то подобное?

1 Ответ

0 голосов
/ 23 мая 2018

Вам нужно обновить переменную монитора, а не просто повторный анализ.У вас была правильная идея, просто нужно было пойти дальше

Кроме того, я переместил вас в setInterval из цикла while, чтобы вы могли запускать вещи в цикле с автоматической синхронизацией, «правильном» способе сделатьэто

let monitor = await Service.monitor(session,taskId);
let percent = JSON.parse(monitor).result[0].data.percent;

let tryCount = 0;
let tryMax = 10;
setInterval(function(){(percent < 100 || tryCount < tryMax) {
    if(percent < 100 || tryCount < tryMax){
    monitor = await Service.monitor(session,taskId);
    let percent = JSON.parse(monitor).result[0].data.percent;
    tryCount++;
    console.log('in a while loop ',tryCount, percent);

    if(tryCount == 10){
        var err = new Error('Error')
        throw err
    }
    }else{
    clearInterval(this);
    }
},5000)

И я предполагаю, что вы как-то перезагружаете monitor, потому что даже если вы повторно проанализируете его, если это соединение на другом сервере, вам придется его перезагрузить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...