我有一个检查代理列表的功能,这个列表我会超时更新,所以我需要这个功能来不断检查这里有什么......我使用的是nodejs,所以这不在浏览器中
var STACK = [] ;
async function check_proxy(){
if(STACK.length < 1 )
{
setTimeout(()=>check_proxy() , 2000 );
return ;
}
var ipport = STACK.pop();
console.log(`------- checking ${ipport}---------`);
await open_browser(ipport);
check_proxy();
}
async function open_browser(){
// do proxy checking
}
check_proxy();
但我一直在
(node:3052) UnhandledPromiseRejectionWarning: RangeError: Maximum call stack size exceeded
at check_proxy (C:\wamp64\www\robot\proxy-check.js:1:1)
at check_proxy (C:\wamp64\www\robot\proxy-check.js:42:16)
at check_proxy (C:\wamp64\www\robot\proxy-check.js:42:16)
at check_proxy (C:\wamp64\www\robot\proxy-check.js:42:16)
at check_proxy (C:\wamp64\www\robot\proxy-check.js:42:16)
我明白为什么我会收到这个错误,但我该如何避免呢?我不想使用 setInterval,因为我希望函数在最后一个代理完成后立即检查每个代理,而且我不知道每个代理需要多长时间
主要是我在这里遇到这个错误
if(STACK.length < 1 )
return setTimeout(()=>check_proxy() , 2000 );
当堆栈为空时......这不时发生,随着时间的推移,这个数组将被另一个函数填充
我可以在这里提高 setTimeout,这样它就不会这么快地调用自己,但我不确定 javascript 是如何工作的,无论如何我可能会收到这个错误......我的意思是我不确定在特定时间段内调用的次数是多少这...或者时间不是一个因素,即使我增加通话之间的时间,我也会以当前的结构得到这个