我正在尝试为我的监视器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
做类似的事情?
答案 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
,因为即使您重新解析它,如果它是不同服务器上的连接,您也需要重新加载它。