欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 如果网络中断,Promise.race 如何处理?

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

2025/2/22 16:46:25 来源:https://blog.csdn.net/qq_36538012/article/details/145632975  浏览:    关键词:如果网络中断,Promise.race 如何处理?

在使用 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 方法中。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词