uni-app 在app.vue中监听onError事件,无法触发

uni-app 在app.vue中监听onError事件,无法触发

项目 信息
产品分类 uniapp/小程序/微信
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 Windows 10 专业版
HBuilderX类型 正式
HBuilderX版本号 3.99
第三方开发者工具版本号 1.06.2401020 stable
基础库版本号 3.3.3
项目创建方式 HBuilderX

示例代码:

home.vue  代码
methods:{
async getDiyInfo() {
let res = await this.$api.sendRequest({
url: '/api/diyview/info',
async: false,
data: {
site_id: this.shop_id || 0
}
});
if (res.data) {  
    let data = JSON.parse(res.data.value)  
    this.diyData = data+ceshi  
}}
}
onLoad(){
this.getDiyInfo()
}

app.vue代码
export default {
onError(err){
console.log('aaaaerr',err)
}
}

操作步骤:

执行以上代码

预期结果:

触发onError事件

实际结果:

onError事件没触发

bug描述:

在app.vue中监听onError事件,无法触发
如何使用原生微信小程序开发方式,onError是可以正常处罚


更多关于uni-app 在app.vue中监听onError事件,无法触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html

18 回复

这是我的测试代码,可以正常触发。 //app.vue

<script> export default { onLaunch: function() { console.log('App Launch'); setTimeout(() => { throw new Error("aaa"); },2000) uni.setLocale('zh-Hans') }, onShow: function() { console.log('App Show'); }, onHide: function() { console.log('App Hide'); }, onError: function(e) { console.log("异常触发:",e); } }; </script>

更多关于uni-app 在app.vue中监听onError事件,无法触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你在这个app.vue抛出的错误(这个场景我这边也可以正常触发),我的场景是在其他页面vue文件抛出的错误无法触发

回复 4***@qq.com: 我刚刚在其他vue文件抛出错误测试了一下,也是正常触发,看看你的问题工程

回复 HRK_01: 那就奇怪了,onPageNotFound这个事情就正常触发的;我的工程是youpin_shop项目

回复 HRK_01: 后续在测试了一下,函数如何使用关键字async 错误就监听不到,未使用async就可以监听到

回复 4***@qq.com: 小程序原生代码编写方式也是有这样的情况

回复 4***@qq.com: 这需要去原生小程序平台那里反馈哦

vue2还是vue3?

能否提供一下工程?确定这个网络请求报错了吗

是故意使用一个未定义的变量this.diyData = data+ceshi ,控制台可以正常打印错误,onError还是捕抓不到,这个语句在原生小程序中就可以触发onError的事件;下面自行跑错错误的我这边也测试,一样无法触发onError,async getDiyInfo() { let res = await this.$api.sendRequest({ url: ‘/api/diyview/info’, async: false, data: { name: ‘DIYVIEW_SHOP_INDEX’, site_id: this.shop_id || 0 } }); if (res.data) {

回复 4***@qq.com: 已在上面回复

我跟你的情况一摸一样,也是不行,在单页面就不触发

请看一下上面回复

app.vue页面我也能正常触发,在别的页面里面触发不了

用原生代码写也能正常触发吗

我也遇到这个问题,这样是可以触发的 async function scanCode() {
const res = await wx
.scanCode({
scanType: ‘qrCode’
})
if (res.result) {
await oxygenChamber.connection(res.result)
}
} 但是这样就不行(错误没有被捕获直接抛到控制台了): function scanCode() {
wx.scanCode({
scanType: ‘qrCode’
}).then(async (res) => {
if (res.result) {
await oxygenChamber.connection(res.result)
}
})
}

uni-app 中,onError 是一个全局的监听事件,通常用于捕获应用中的未捕获异常或错误。如果你在 App.vue 中监听 onError 事件但无法触发,可能是以下原因之一:

1. onError 的触发条件

  • onError 通常只能捕获到未被 try-catch 捕获的同步错误或异步错误(如 Promise 未处理的 reject)。
  • 如果你在代码中已经捕获了错误(比如使用了 try-catch),onError 将不会触发。

2. onError 的监听位置

  • onError 需要在 App.vueonLaunchonShow 等生命周期钩子中进行监听。
  • 确保你在正确的位置监听了 onError

3. 示例代码

以下是一个在 App.vue 中监听 onError 的示例:

<script>
export default {
  onLaunch() {
    // 监听全局错误
    uni.onError((error) => {
      console.error('捕获到全局错误:', error);
    });
  }
}
</script>

4. 测试错误

你可以通过以下方式测试 onError 是否生效:

  • 同步错误

    // 在某个页面或组件中抛出一个未捕获的错误
    throw new Error('这是一个测试错误');
    
  • 异步错误

    // 未处理的 Promise reject
    Promise.reject('这是一个未处理的 Promise 错误');
    

5. 检查其他问题

  • 确保你的 uni-app 版本是最新的。
  • 如果你在开发环境中使用了某些调试工具(如 Vue Devtools),可能会导致某些错误被捕获而不触发 onError

6. 其他全局事件

除了 onErroruni-app 还提供了其他全局事件,如 onPageNotFoundonUnhandledRejection 等,你可以根据需要进行监听。

uni.onPageNotFound((res) => {
  console.error('页面未找到:', res);
});

uni.onUnhandledRejection((res) => {
  console.error('未处理的 Promise reject:', res);
});
回到顶部