uni-app 微信小程序 uploadTask.abort() 中断上传会一直提示错误,在支付宝小程序及编译成安卓运行则无问题
uni-app 微信小程序 uploadTask.abort() 中断上传会一直提示错误,在支付宝小程序及编译成安卓运行则无问题
项目信息 | 详情 |
---|---|
产品分类 | uniapp/小程序/微信 |
PC开发环境操作系统 | Mac |
PC开发环境操作系统版本号 | M3 14.6.1 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.29 |
第三方开发者工具版本号 | 1.06.2409140 darwin-arm64 |
基础库版本号 | 3.6.4 |
项目创建方式 | HBuilderX |
示例代码:
this.uploadTask = uni.uploadFile({
...
this.uploadTask.abort() // 报错
操作步骤:
- 使用uploadFile上传文件到指定api
- 手动触发uploadtask.abort (我是放到onUnload中执行,预计页面返回中断上传)
- 结果查看console控制台报错
预期结果:
不报错,uploadFile直接被中断从而执行fail callback函数
实际结果:
报错,继续执行uploadFile
bug描述:
微信小程序 执行到 uploadTask.abort()
打印的错误 undefined is not an object (evaluating 'Im.get(this).promise')
具体如下
{message: "undefined is not an object (evaluating 'Im.get(this).promise')", line: 1, column: 967578, sourceURL: "https://lib/WAServiceMainContext.js", stack: "abort@https://lib/WAServiceMainContext.js:1:967578↵@https://usr//app-service.js:17094:55↵@[native code]↵h@https://lib/WAServiceMainContext.js:1:41733↵onUnload@[native code]↵onUnload@https://usr//app-service.js:17095:25↵onUnload@[native code]↵@https://usr//app-service.js:5668:18↵@[native code]↵h@https://lib/WAServiceMainContext.js:1:41733↵_o@[native code]↵_o@https://usr//app-service.js:5672:24↵@https://usr//app-service.js:5675:19↵@[native code]↵h@https://lib/WAServiceMainContext.js:1:41733↵yo@[native code]↵yo@https://usr//app-service.js:5683:24↵@https://usr//app-service.js:6017:17↵@[native code]↵h@https://lib/WAServiceMainContext.js:1:41733↵anonymous@[native code]↵@https://usr//app-service.js:6019:30↵@https://usr//app-service.js:7260:115↵@[native code]↵h@https://lib/WAServiceMainContext.js:1:41733↵anonymous@[native code]↵@https://usr//app-service.js:7262:28↵@https://usr//app-service.js:7262:32↵@[native code]↵h@https://lib/WAServiceMainContext.js:1:41733↵Qs@[native code]↵Qs@https://usr//app-service.js:7263:24↵@https://usr//app-service.js:7283:39↵@[native code]↵h@https://lib/WAServiceMainContext.js:1:41733↵anonymous@[native code]↵@https://usr//app-service.js:7284:28↵@https://lib/WASubContext.js:1:459750↵@[native code]↵@https://lib/WASubContext.js:1:459543↵@https://lib/WASubContext.js:1:473041↵@https://lib/WASubContext.js:1:431573↵@https://lib/WASubContext.js:1:476597↵@https://lib/WASubContext.js:1:431573↵@https://lib/WASubContext.js:1:477812↵@https://lib/WASubContext.js:1:431573↵Pr@https://lib/WASubContext.js:1:478656↵@https://lib/WASubContext.js:1:430607↵@https://lib/WAServiceMainContext.js:1:871322↵emitInternal@https://lib/WAServiceMainContext.js:1:876558↵tS@https://lib/WAServiceMainContext.js:1:1016508↵HH@https://lib/WAServiceMainContext.js:1:1349178↵O@https://lib/WAServiceMainContext.js:1:2137973↵@https://lib/WAServiceMainContext.js:1:2139250↵@https://lib/WAServiceMainContext.js:1:1296228↵@https://lib/WAServiceMainContext.js:1:871421↵emit@https://lib/WAServiceMainContext.js:1:876466↵@https://lib/WAServiceMainContext.js:1:877685↵@https://lib/WAServiceMainContext.js:1:867652↵@https://lib/WAServiceMainContext.js:1:858073↵emit@https://lib/WAServiceMainContext.js:1:339422↵emit@[native code]↵emit@https://lib/WAServiceMainContext.js:1:338794↵subscribeHandler@https://lib/WAServiceMainContext.js:1:347247↵@[native code]"}
在处理 uni-app
中微信小程序上传任务中断(uploadTask.abort()
)时遇到错误提示的问题,这通常是由于微信小程序的上传任务管理逻辑与其他平台存在差异导致的。以下是一些可能的代码案例和解释,帮助你更好地理解和处理这个问题。
微信小程序代码案例
在微信小程序中,当你调用 uploadTask.abort()
中断上传时,应该正确处理上传任务的错误回调,以避免不必要的错误提示。以下是一个基本的上传任务管理示例:
// 创建一个上传任务
const uploadTask = wx.uploadFile({
url: 'https://example.com/upload', // 仅为示例,请使用实际服务器地址
filePath: tempFilePaths[0],
name: 'file',
formData: {
user: 'test'
},
success(res) {
console.log('上传成功:', res);
},
fail(err) {
// 处理上传失败的情况,包括由于调用 abort() 导致的失败
if (err.errMsg === 'uploadFile:fail abort') {
console.log('上传已中断');
} else {
console.error('上传失败:', err);
}
}
});
// 在需要中断上传的地方调用
uploadTask.abort();
错误处理
在上述代码中,fail
回调中检查了错误消息 errMsg
是否为 'uploadFile:fail abort'
,这是微信小程序特有的错误码,表示上传被用户或代码中断。通过这种方式,你可以区分上传失败是由于网络问题、服务器错误还是由于用户主动中断。
平台差异处理
对于支付宝小程序和编译成安卓运行的情况,由于这些平台可能不返回特定的中断错误码,或者它们的上传任务管理逻辑与微信小程序不同,因此你可能不需要进行特别的错误码检查。但是,为了保持代码的一致性和可维护性,建议在所有平台的上传逻辑中都实现类似的错误处理机制,只是根据不同的平台条件进行适当的调整。
结论
微信小程序的上传任务中断处理需要特别注意错误回调中的错误码检查,以避免不必要的错误提示。而其他平台如支付宝小程序和安卓应用则可能不需要这样的特殊处理。通过编写跨平台的兼容代码,你可以确保应用在不同平台上都能稳定运行。在实际开发中,建议根据具体平台的文档和测试结果来调整上传任务的错误处理逻辑。