throw exception这么基本的微信小程序都不行!!!
发布于 5 年前 作者 yifang 8541 次浏览 来自 问答

对于特定的情况需要抛出异常中断方法的执行并对其进行处理,发现定义的异常抛出后,无法利用try…catch…捕获!!!,什么鬼!!!

10 回复

js可以try catch吧

好像是,我在js试了一下也是不行,估计是单线程异步造成的,可是这样就达不到中断方法执行的目的了

导致这个问题的原因是因为我们框架本身会捕获 setInterval setTimeout 里的异常,用于 mp 上的异常上报。

如果确实要实现的话,可以在 setInterval 上套一层来实现

上述代码有小错误,改为console.log(err);

会有这个还是因为我们团队发现在弱网情况下(IOS开发者工具very bad network),一次请求多个接口时(只是这种情况还是普遍情况就不知道了),json中设置的

"networkTimeout": {    "request": 10000,    "downloadFile": 10000
  },

无效,实际请求的超时并没有收到异常提示,因此自己想计时抛出异常。

function tryTestThrowException() {
  try{
    testThrowException();
  } catch (err) {
    console.log(e);
  }
}
 
function testThrowException() {
  let sec = 0;
  const timer = setInterval(() => {
    sec++;
    if (sec > 5) {
      console.info('即将清除timer');
      clearInterval(timer);
      console.info('已经清除timer');
      throw new Error('网络超时');
    }
  }, 1000);
}
Page({
    onShow: function () {
        try {
            testThrowException();
        } catch (err) {
            console.log('err: ', err);
        }
        tryTestThrowException();
    }
})

参考了http://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=24db43fe9b73ad313ff51fab1a3ef4f0&highline=try&token=&lang=zh_CN修改,总之要么无法捕获异常,要么无法中断执行。小程序框架把exception截获不合理哈😂

你可以用 Promise处理。

兄弟,你这是异步事件里面的异常,需要在异步里捕获。

testThrowException: function() {
    let sec = 0;
    const timer = setInterval(() => {
      sec++;
      if (sec > 5) {
        console.info('即将清除timer');
        clearInterval(timer);
        console.info('已经清除timer');
        try{
          throw new Error('网络超时');
        }
        catch (err){
          console.log(err)
        }
      }
    }, 1000);
  },

你好,请具体描述问题出现的流程,并提供能复现问题的简单代码示例。

回到顶部