收藏
回答

云函数如何手动抛异常

问题模块 框架类型 问题类型 终端类型 AppID 基础库版本
云开发 小程序 Bug 工具 wxd22b28655212b7d9 2.2.5

- 当前 Bug 的表现(可附上截图)

云函数中抛出异常,但是小程序仍然接受到正常的返回

exports.main = async (event, context) => {

throw('error')

}


但是小程序调用端,仍然正常返回,result:null 。


- 预期表现

小程序端的catch中的函数被调用


- 复现路径


- 提供一个最简复现 Demo

云函数端

exports.main = async (event, context) => {

throw('error')

}

小程序端

wx.cloud.callFunction({

name: 'throwtest',

}).then(res => {

console.log('without error:', res)

}).catch(err => {

console.log('error:', err)

})


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

2 个回答

  • 半寸灰
    半寸灰
    2018-11-22

    云函数端抛出异常  与小程序端没关系的 。这两个是独立  怎么会互相影响。最多你从逻辑处理。

    就像我服务器抛出异常  我前端为啥要抛出异常。这不符合常理。

    2018-11-22
    赞同
    回复 8
    • 拓扑拓 欧阳
      拓扑拓 欧阳
      2018-11-22

      但是云函数调用api抛出的异常可以由小程序端接受。你看小程序端的调用写法

      wx.cloud.callFunction({

        name: 'throwtest',

      }).then(res => {

        console.log('without error:', res)

      }).catch(err => {

        console.log('error:', err)

      })

      按腾讯工程师的设计思路,我想这里就是后端抛出了异常,前端应该是要catch到的。我之所以这么提问,是建立在我充分理解前后端运行机制下提出的。我当然明白这是两个独立的系统。按云开发serverless的思路走,你手云函数抛出的异常,前端是不是应该catch到?


      2018-11-22
      回复
    • 半寸灰
      半寸灰
      2018-11-22回复拓扑拓 欧阳

      那是逻辑处理  前端并不能直接catch  

      比如我后端异常了   我就直接告诉前端   我这里异常了   你也要异常。并不是我异常  你就一定异常  。

      2018-11-22
      回复
    • 拓扑拓 欧阳
      拓扑拓 欧阳
      2018-11-22回复半寸灰

      但是后端云函数如果是发生api调用异常。例如,数据库调用异常,db.collection('no_exit_collection').get()。这种情况,前端是可以catch到异常的。这就是后端异常抛给了前端。就是说,云函数的开发团队是考虑过要让前端catch到后端异常的。

      2018-11-22
      回复
    • 拓扑拓 欧阳
      拓扑拓 欧阳
      2018-11-22回复半寸灰

      我当然知道那是逻辑处理,我意思是。这种逻辑处理的手段,是否小程序研发团队应该开放给普通开发者这种让前端catch异常的接口

      2018-11-22
      回复
    • 半寸灰
      半寸灰
      2018-11-23回复拓扑拓 欧阳

      那只是把异常信息给到前端而已。然后前端根据异常信息抛出异常。这就是逻辑处理

      2018-11-23
      回复
    查看更多(3)
  • 陈智
    陈智
    06-26

    这里实际上应该是云函数外层会catch住函数抛出的异常,然后包装成微信的异常,我这里就是手动抛了一个无权限的异常,最后小程序端catch住的异常只是把我的异常msg包装进去了 无法自定义错误码

    06-26
    赞同
    回复