如果网络中断,Promise.race 如何处理?

news/2025/2/15 18:51:04/

在使用 Promise.race 时,如果网络中断,通常会导致请求失败,并触发相应的错误处理。这可以通过 Promise.race 中的 Promise 对象来捕获。以下是如何处理网络中断的详细说明。

1. 网络中断的处理

网络中断时,uni.requestuni.uploadFileuni.downloadFilefail 回调会被触发,你可以在这些回调中拒绝 Promise,并在 Promise.racecatch 方法中处理这个错误。

示例代码

以下是一个包含网络中断处理的 Promise.race 示例,适用于文件上传和下载。

1.1 文件上传示例

function uploadFile(file) {const requestTimeout = 5000; // 设置超时时间为 5 秒const uploadPromise = new Promise((resolve, reject) => {uni.uploadFile({url: 'https://example.com/upload',filePath: file.path,name: 'file',formData: {otherData: 'value'},success: (res) => {if (res.statusCode === 200) {resolve(res.data);} else {reject(new Error('服务器错误: ' + res.statusCode));}},fail: (error) => {reject(new Error('上传失败: ' + error.errMsg)); // 网络中断时会触发这里}});});const timeoutPromise = new Promise((_, reject) => {setTimeout(() => {reject(new Error('上传超时'));}, requestTimeout);});Promise.race([uploadPromise, timeoutPromise]).then((data) => {console.log('上传成功:', data);}).catch((error) => {if (error.message === '上传超时') {console.error('请求超时');} else {console.error('请求失败或网络中断:', error.message);}});
}

1.2 文件下载示例

function downloadFile(url) {const requestTimeout = 5000; // 设置超时时间为 5 秒const downloadPromise = new Promise((resolve, reject) => {uni.downloadFile({url: url,success: (res) => {if (res.statusCode === 200) {resolve(res.tempFilePath);} else {reject(new Error('服务器错误: ' + res.statusCode));}},fail: (error) => {reject(new Error('下载失败: ' + error.errMsg)); // 网络中断时会触发这里}});});const timeoutPromise = new Promise((_, reject) => {setTimeout(() => {reject(new Error('下载超时'));}, requestTimeout);});Promise.race([downloadPromise, timeoutPromise]).then((filePath) => {console.log('下载成功:', filePath);}).catch((error) => {if (error.message === '下载超时') {console.error('请求超时');} else {console.error('请求失败或网络中断:', error.message);}});
}

2. 总结

Promise.race 中,如果发生网络中断,相关的请求 Promise 会被拒绝,并进入到 catch 方法中。


http://www.ppmy.cn/news/1572317.html

相关文章

无人机雨季应急救灾技术详解

无人机在雨季应急救灾中发挥着至关重要的作用,其凭借机动灵活、反应迅速、高效安全等特点,为救灾工作提供了强有力的技术支撑。以下是对无人机雨季应急救灾技术的详细解析: 一、无人机在雨季应急救灾中的应用场景 1. 灾情侦查与监测 无人机…

2025.2.14——1400

2025.2.14——1400 A 1400 B 1400 C 1400 D 1400 E 1400 F 1400 G 1400 H 1400 ------------------------------------------------ 思维排序/双指针/二分/队列匹配思维二分/位运算思维数学思维 A 一眼想到的是维护信息计数。维护两个信息同时用长的一半去找短的一半…

网络安全 | 5G网络安全:未来无线通信的风险与对策

网络安全 | 5G网络安全:未来无线通信的风险与对策 一、前言二、5G 网络的技术特点2.1 超高速率与低延迟2.2 大容量连接与网络切片 三、5G 网络面临的安全风险3.1 网络架构安全风险3.2 设备终端安全风险3.3 应用场景安全风险3.4 用户隐私安全风险 四、5G 网络安全对策…

分享 UniApp 中超好看的卡片阴影样式

在 UniApp 开发中,页面的视觉效果对于提升用户体验至关重要。一个设计精美的卡片样式往往能让页面更加美观和吸引人,而阴影效果则是为卡片增添立体感和层次感的关键元素。今天,我就来和大家分享一个在 UniApp 中实现的卡片阴影样式&#xff0…

部门管理(体验,最原始方法来做,Django+mysql)

本人初学,写完代码在此记录和复盘 在创建和注册完APP之后(我的命名是employees),编写models.py文件创建表 手动插入了几条数据 1.部门查询 urls.py和views.py在编写之前,都要注意导入对应的库 urls.py:…

【实测】用全志A733平板搭建一个端侧Deepseek算力平台

随着DeepSeek 的蒸馏技术的横空出世,端侧 SoC 芯片上运行大模型成为可能。那么端侧芯片跑大模型的效果如何呢?本文将在全志 A733 芯片平台上部署一个 DeepSeek-R1:1.5B 模型,并进行实测效果展示。 端侧平台环境 设备:全志A733平板…

Spring基于文心一言API使用的大模型

有时做项目我们可能会遇到要在项目中对接AI大模型 本篇文章是对使用文心一言大模型的使用总结 前置任务 在百度智能云开放平台中注册成为开发者 百度智能云开放平台 进入百度智能云官网进行登录,点击立即体验 点击千帆大模型平台 向下滑动,进入到模型…

深度学习与增强现实的完美邂逅:开启未来智能交互的新篇章

深度学习与增强现实的完美邂逅:开启未来智能交互的新篇章 近年来,随着深度学习和增强现实(AR)技术的飞速发展,二者的结合应用正逐步改变着我们的生活方式。从智能驾驶到医疗诊断,再到游戏娱乐,深度学习为增强现实提供了强大的算法支持,而增强现实则为深度学习提供了丰…