我想实现对循环的检查,无论它是否无限。这就是我尝试做的事情,但不能使这项工作成功。我该如何打破循环?
function isInfiniteProcess(a, b) {
while (a !== b) {
a++;
b--;
}
}
isInfiniteProcess(2, 3)
如果它是无限的,我如何结束这个循环?
答案 0 :(得分:3)
有一张我看过被使用过的支票(一种hacky)。它使用created() {
this.getInfo();
},
methods: {
getInfo() {
let vm = this;
let url = [my api url];
axios.get(url)
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
})
},
来跟踪循环使用的时间。它不会检查循环是否真的无限,它只是检查它是否需要花费太长时间:
Date
这不太可靠,但它有助于检测循环是否无限。阈值(此处为function isInfiniteProcess(a, b) {
var t0 = Date.now();
while (a !== b) {
a++;
b--;
if(Date.now() - t0 > 5000) { // if this loop keeps running for 5 seconds and not finished yet
return true; // break it and return true
}
}
return false; // otherwise return false (the loop finished before 5 seconds has passed)
}
if(isInfiniteProcess(2, 3))
console.log("The loop may be infinite...");
秒)完全取决于您选择。
注意:正如@ comment在{{3}}中提到的那样,您可以使用迭代计数器而不是时间增量:
5
至于另一种方法,threshhold(这里var counter = 0;
while(...) {
...
if(++counter > 1000000) { // after the 1000000th iteration
return true; // assume the loop is infinite and break it
}
}
次迭代)真的由你来决定。
答案 1 :(得分:2)
如果a变得大于b,你的循环将永远变为无限。 所以要退出while循环你可以像这样使用break:
function isInfiniteProcess(a, b) {
while (a !== b) {
a++;
b--;
if(a > b) break;
}
if(a > b) return true;
}