代码之家  ›  专栏  ›  技术社区  ›  Jatt

捕获从setInterval内部引发的异常

  •  1
  • Jatt  · 技术社区  · 6 年前

    捕获从内部抛出的错误的最佳方法是什么 setInterval ?当前从下面的代码中,在引发异常时,控件未到达 catch

        try {
    
            timer = setInterval(() => {
                if (moment().diff(lastProcessTime, 'minute') >= 2) {
                    // Taking too long!
                    clearInterval(timer);
                    throw new Error({ code: -1, message: `Taking too long to response:: ${urls[0]}` });
                }
            }, 1000);
    
    
            await c.downloadAndSaveDataFromRssUrls(configs, urls);
            clearInterval(timer);
            return Promise.resolve();
        } catch (err) {
            clearInterval(timer);
            console.log(err);
            return Promise.resolve();
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Zenoo    6 年前

    你需要移动你的 try catch 内部 setInterval :

    function greet() {
      let i = setInterval(() => {
        try {
          if (Math.random() * 100 > 5) {
            clearInterval(i);
            throw new Error("Number is greater than 5");
          }
        } catch (err) {
          console.log('Hello')
          console.log(err);
        }
      }, 1000);
    }
    
    greet();