创建一个在某次尝试后中断的while循环 - NodeJS

时间:2018-05-23 18:48:14

标签: javascript node.js nodes

描述

我正在尝试为我的监视器API编写一个while循环。 目标是调用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 :(得分:3)

您需要刷新监视器变量,而不是仅重新解析。你有正确的想法,只需要进一步了解

另外,我从while循环移动到setInterval,这样你就可以在自动定时循环上运行东西,这是“正确”的方法

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,因为即使您重新解析它,如果它是不同服务器上的连接,您也需要重新加载它。