unhandledRejection: {“errMsg“:“request:fail network not available“,“errNo“:10401,“isPrefetch“...

文章讨论了网络不可用错误在IT项目中的常见表现,如unhandledRejection,提出在uniapp项目中通过manifest.json设置接口请求超时时间以改善用户体验,并给出了统一处理请求失败的示例。

一、相关报错

unhandledRejection: {
    "errMsg":"request:fail network not available",
    "errNo":10401,
    "isPrefetch":false,
    "prefetchDetail":-1,
    "prefetchInfo":{
        "mismatchReason":"'usePrefetchCache' is false",
        "actualValue":"https://api.qingzhangwh.cn/v2/Track/toutiao"
    }
}

捕捉截图:

二、解析

request:fail network not available释义为:网络不可用

其实此报错与系统代码无关,一般为用户的网络情况不佳导致,与此相关的报错信息还有:

        "errMsg":"request:fail request time out","errNo":21103...等

三、如何解决或优化

一般出现此问题,最好给用户一个提示信息,以此提升用户体验感。

以uniapp项目为例,uniapp项目可以在manifest.json文件中,统一设置接口请求超时时间,如下图

可看个人需要设置超时时间,一般为20~30s(仅供参考)

// 接口超时设置
"networkTimeout" : {
    "request" : 20000 // 接口超时时间设置为20s
},

超时时间设置后,在request请求文件fail回调中统一处理报错信息,如下示例:

fail: (err)=> {
        // 可加if判断是否为网络超时 再给网络相关提示
        uni.showModal({
            title: '提示',
            showCancel: false,
            content: '网络不给力,请求超时'
        })
}

(当然,也可以在此做页面跳转或刷新处理)

四、结语

以上仅为个人观点,感谢观看。

### 微信小程序 `showTabBar` 出现 `UnhandledPromiseRejection` 错误的原因分析 在微信小程序中,当调用 `wx.showTabBar()` 方法时,可能会遇到 `UnhandledPromiseRejection` 错误。这种错误通常发生在当前页面并非 tabBar 页面的情况下尝试调用该方法[^1]。 #### 问题原因 根据官方文档和实际案例,`wx.showTabBar()` 和其他与 tabBar 相关的操作(如 `setTabBarItem` 或 `hideTabBar`)都存在一定的约束条件: - **约束一**:这些 API 只能作用于配置为 tabBar 的页面上。如果当前页面未被设置为 tabBar 页面,则会触发失败回调或抛出异常[^1]。 - **约束二**:即使通过某些方式隐藏了 tabBar,在非 tabBar 页面上调用此类方法也会导致类似的错误提示。 因此,“`fail not TabBar page`”表明当前执行此操作的环境并不满足作为 tabBar 页面的要求。 #### 解决方案 以下是几种可能有效的解决方案: 1. **确认当前页面是否属于 tabBar 设置范围** - 打开项目的 `app.json` 文件,检查其中定义的 `tabBar.list` 数组内容,确保目标页面路径已正确列入该项下[^3]。 2. **调整逻辑以适应运行上下文** 如果业务场景确实需要动态控制 tabBar 显示状态但又无法保证始终处于合法位置,则需重新设计交互流程或者利用条件渲染技术规避非法调用风险。例如: ```javascript const isTabBarPage = getCurrentPages().some(page => { const { __route__ } = page; return app.globalData.tabBarRoutes.includes(__route__); }); if (isTabBarPage) { wx.showTabBar({ animation: true, success() {}, fail(err) { console.error('Failed to show tab bar:', err); } }); } else { console.warn('Current page is not a tab bar page.'); } ``` 3. **捕获并处理 Promise Rejections** 对于现代 JavaScript 开发者来说,了解如何妥善管理异步编程非常重要。针对本例中的情况,可以通过全局监听器来捕捉未被捕获的 promise rejection 并记录日志以便后续排查修复: ```javascript App({ onLaunch() { process.onUncaughtException((err, origin) => { console.log(`Caught exception: ${err}\nOrigin: ${origin}`); }); process.onUnhandledRejection(reason, promise) { console.log('Unhandled Rejection at:', promise, 'reason:', reason); }; }, }); ``` 4. **合理选用跳转方式** 当涉及跨不同类型的页面间导航时,请严格遵循以下原则避免冲突: - 使用 `wx.switchTab` 跳转至 tabBar 页面; - 使用 `wx.navigateTo`, `wx.redirectTo` 访问普通页面[^4]。 以上措施能够有效减少因不当使用而导致的功能性障碍及其伴随的技术难题。 ```javascript // 正确示例:从非 tabBar 页面安全返回到某个 tabBar 页面 wx.switchTab({ url: '/pages/index/index', }); ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值