【问题标题】:Maximum stack size exceeded超出最大堆栈大小
【发布时间】:2013-08-02 19:20:56
【问题描述】:

我有这个javascript方法:

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

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

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

有没有更好的方法来做到这一点?
如何解决此错误?

【问题讨论】:

    标签: javascript asynchronous


    【解决方案1】:

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

    在您的else 中执行此操作:

    setTimeout(waitcheck, 2000)
    

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

    【讨论】:

    • 这是正确的。完全搞砸了我的代码(不应该有分号和 ())。谢谢
    【解决方案2】:

    这是使用setInterval的教科书示例

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

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

    【讨论】:

      【解决方案3】:

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

      像这样:

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

      【讨论】:

      • 这是正确的。完全搞砸了我的代码(不应该有分号和 ())。谢谢
      猜你喜欢
      • 1970-01-01
      • 2015-10-24
      • 2015-12-29
      • 2017-12-27
      • 2020-12-06
      • 2018-02-06
      • 2020-06-28
      • 2016-02-28
      • 2018-08-07
      相关资源
      最近更新 更多