0

我有这个javascript方法:

function waitcheck(){
        if(wait == 0){
            offlineUpload()
        }
        else{
            setTimeout(waitcheck(), 2000)
        }
    }

我迷路了,现在我收到一条错误消息“超出最大堆栈大小”

此方法的目标是等到 var 被异步函数变为“0”。

有一个更好的方法吗?
我怎样才能绕过这个错误?

4

3 回答 3

4

您正在waitcheck递归调用该函数,而不是将函数传递给setTimeout.

在你的else

setTimeout(waitcheck, 2000)

假设您的wait全局在此函数之外正确设置,您的代码应该可以工作。

于 2013-08-02T19:22:31.560 回答
1

这是教科书示例在哪里使用setInterval

这将每 2 秒执行一次检查器功能,并在等待为 0 时停止。

var interval = setInterval(function() {
  if(wait === 0){
    clearInterval(interval);
    offlineUpload();
  }
}, 2000);
于 2017-10-23T23:09:20.993 回答
0

删除函数名称上的括号。(它们导致该函数被调用,而不是作为参考传递。)

像这样:

function waitcheck(){
        if(wait == 0){
            offlineUpload()
        }
        else{
            setTimeout(waitcheck, 2000)
        }
    }
于 2013-08-02T19:23:43.310 回答