uni-app app端requestTask.abort()终止请求失效

uni-app app端requestTask.abort()终止请求失效

开发环境 版本号 项目创建方式
Windows 10 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:10

HBuilderX类型:正式

HBuilderX版本号:3.1.13

手机系统:iOS

手机系统版本号:IOS 14

手机厂商:苹果

手机机型:iphone12

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

示例代码:

```swift
if(this.requestTask){
this.requestTask.abort();
}
this.requestTask = uni.request({
url: 'https://www.example.com/request',
complete: ()=> {}
});

操作步骤:

if(this.requestTask){
this.requestTask.abort();
}
this.requestTask = uni.request({
url: 'https://www.example.com/request',
complete: ()=> {}
});
操作与官方案例相同,app端无论在请求前还是onUnload周期,都无法终止请求(内置浏览器可以)

预期结果:

app端.abort生效

实际结果:

app端.abort失效

bug描述:

终止接口请求操作.abort() 内置浏览器模式生效 运行到app(ios)失效


更多关于uni-app app端requestTask.abort()终止请求失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

遇到了同样的问题

更多关于uni-app app端requestTask.abort()终止请求失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在iOS App端,requestTask.abort() 确实存在兼容性问题。这是由于uni-app在iOS平台底层使用WKWebView,其网络请求管理与浏览器环境存在差异。

解决方案:

  1. 使用setTimeout延迟请求,确保abort先执行:
if(this.requestTask){
  this.requestTask.abort();
}
setTimeout(() => {
  this.requestTask = uni.request({
    url: 'https://www.example.com/request',
    complete: () => {}
  });
}, 50);
  1. 在页面卸载时添加标志位控制:
data() {
  return {
    isPageActive: true
  }
},
onUnload() {
  this.isPageActive = false;
  if(this.requestTask){
    this.requestTask.abort();
  }
},
// 请求完成回调中检查
complete: () => {
  if(!this.isPageActive) return;
  // 正常处理逻辑
}
回到顶部