Javascript 超出了最大堆栈大小

Javascript 超出了最大堆栈大小,javascript,asynchronous,Javascript,Asynchronous,我有一个javascript方法: function waitcheck(){ if(wait == 0){ offlineUpload() } else{ setTimeout(waitcheck(), 2000) } } 我迷路了,现在我得到一个错误,说“超过了最大堆栈大小” 此方法的目标是等待var被异步函数转换为“0” 有更好的方法吗? 如何避免此错误?您正在递归调用

我有一个javascript方法:

function waitcheck(){
        if(wait == 0){
            offlineUpload()
        }
        else{
            setTimeout(waitcheck(), 2000)
        }
    }
我迷路了,现在我得到一个错误,说“超过了最大堆栈大小”

此方法的目标是等待var被异步函数转换为“0”

有更好的方法吗?

如何避免此错误?

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

在您的
else
中执行此操作:

setTimeout(waitcheck, 2000)

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

您是递归调用
waitcheck
函数,而不是将函数传递到
setTimeout

在您的
else
中执行此操作:

setTimeout(waitcheck, 2000)

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

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

像这样:

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

删除函数名上的括号。(它们导致调用该函数,而不是将其作为引用传递。)

像这样:

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

这是使用
setInterval

这将每2秒执行一次checker函数,并在wait为0时停止

var interval = setInterval(function() {
  if(wait === 0){
    clearInterval(interval);
    offlineUpload();
  }
}, 2000);

这是使用
setInterval

这将每2秒执行一次checker函数,并在wait为0时停止

var interval = setInterval(function() {
  if(wait === 0){
    clearInterval(interval);
    offlineUpload();
  }
}, 2000);

这是正确的。完全搞砸了我的代码(在不应该的地方没有分号和()。谢谢这是正确的。完全搞砸了我的代码(在不应该的地方没有分号和()。谢谢这是正确的。完全搞砸了我的代码(在不应该的地方没有分号和()。谢谢这是正确的。完全搞砸了我的代码(在不应该的地方没有分号和()。谢谢