- 当前 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)
})
wx.cloud.callFunction({ name: 'throwtest', }).then(res => { console.log('without error:', res) }).catch(err => { console.log('error:', err) })
如果云函数无法主动抛出错误,前端里自己的逻辑就只能在 then 里处理了
同问。我就想在查云数据库之前做一些拦截,抛给调用方一些参数上的错误异常,咋弄
这里实际上应该是云函数外层会catch住函数抛出的异常,然后包装成微信的异常,我这里就是手动抛了一个无权限的异常,最后小程序端catch住的异常只是把我的异常msg包装进去了 无法自定义错误码
云函数端抛出异常 与小程序端没关系的 。这两个是独立 怎么会互相影响。最多你从逻辑处理。
就像我服务器抛出异常 我前端为啥要抛出异常。这不符合常理。
但是云函数调用api抛出的异常可以由小程序端接受。你看小程序端的调用写法
wx.cloud.callFunction({
name: 'throwtest',
}).then(res => {
console.log('without error:', res)
}).catch(err => {
console.log('error:', err)
})
按腾讯工程师的设计思路,我想这里就是后端抛出了异常,前端应该是要catch到的。我之所以这么提问,是建立在我充分理解前后端运行机制下提出的。我当然明白这是两个独立的系统。按云开发serverless的思路走,你手云函数抛出的异常,前端是不是应该catch到?
那是逻辑处理 前端并不能直接catch
比如我后端异常了 我就直接告诉前端 我这里异常了 你也要异常。并不是我异常 你就一定异常 。
但是后端云函数如果是发生api调用异常。例如,数据库调用异常,db.collection('no_exit_collection').get()。这种情况,前端是可以catch到异常的。这就是后端异常抛给了前端。就是说,云函数的开发团队是考虑过要让前端catch到后端异常的。
我当然知道那是逻辑处理,我意思是。这种逻辑处理的手段,是否小程序研发团队应该开放给普通开发者这种让前端catch异常的接口
那只是把异常信息给到前端而已。然后前端根据异常信息抛出异常。这就是逻辑处理