我需要编写一个满足以下要求的函数:
f(A)
m
f(A)m
f(B)
n
f(B)
在单个<代码>D13测试中连续失败,则每隔<代码>D15秒f(B)
在一次f(A)
测试中未连续失败o
,则会照常每隔m
秒运行下一个D21。F224
我可以这样做:
function runTests(ms) {
let runTestsMS = ms || m;
setTimeout(() => {
let count = 0;
setInterval(async () => {
try {
await axios.get('...');
count = 0;
runTestsMS = ms || m;
} catch (error) {
count += 1;
if (count === o) {
runTests(p);
}
}
}, n);
runTests(runTestsMS);
}, runTestsMS);
}
runTests();
此函数不执行上述规则3。如果连续失败,下一个f(A)
仍将每隔m
秒运行一次。
我遗漏了什么?
发布于 2018-10-14 01:28:05
setInterval
在不等待任何东西的情况下立即返回。你必须在一个循环中await
一个计时器:
const timer = ms => new Promise(res => setTimeout(res, ms);
async function runTests(ms) {
while(true) {
let count = 0;
while(count < 3) {
try {
await axios.get('...');
break;
} catch (error) {
count += 1;
await timer(n);
}
}
await timer(m);
}
}
发布于 2018-10-14 01:36:55
在您的代码中,不带参数调用函数runTests()
,这是可以的,因为在函数中您已经指定了let runTestsMS = ms || m
。
当ms
和m
都没有实际值时,问题就出现了。
https://stackoverflow.com/questions/52795467
复制相似问题