收藏
回答

throw exception这么基本的微信小程序都不行!!!

问题模块
API和组件

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

最后一次编辑于  2017-11-21  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

10 个回答

  • Special
    Special
    2017-11-22

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

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

    2017-11-22
    赞同
    回复
  • Special
    Special
    2017-11-21

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

    2017-11-21
    赞同
    回复
  • Randy 🦈
    Randy 🦈
    2017-11-22

    你可以用 Promise处理。

    2017-11-22
    赞同
    回复
  • 谬图-Mutrix
    谬图-Mutrix
    2017-11-21

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

    2017-11-21
    赞同
    回复
  • Randy 🦈
    Randy 🦈
    2017-11-21

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

    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);
      },


    2017-11-21
    赞同
    回复
  • 谬图-Mutrix
    谬图-Mutrix
    2017-11-21

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

    2017-11-21
    赞同
    回复
  • 谬图-Mutrix
    谬图-Mutrix
    2017-11-21

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

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

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

    2017-11-21
    赞同
    回复
  • 谬图-Mutrix
    谬图-Mutrix
    2017-11-21
    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();
        }
    })


    2017-11-21
    赞同
    回复
  • 谬图-Mutrix
    谬图-Mutrix
    2017-11-21

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


    2017-11-21
    赞同
    回复
  • 这都申请了
    这都申请了
    2017-11-21

    js可以try catch吧

    2017-11-21
    赞同
    回复