dcloudio / dcloudio/uni-app

uni.addInterceptor 无法正确处理多个拦截器异步的链式调用

Open
#5,422 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
JavaScript
Stars
41.6k
Forks
3.7k
Avg merge
7h 6m
Merged PRs (30d)
6

Description

### 发行方式

小程序

### 具体平台

微信小程序

### 开发环境

Windows

### 项目创建方式

CLI命令行

### 依赖版本

{
"name": "hm-shopping",
"version": "0.1.0",
"private": true,
"dependencies": {
"@vant/weapp": "^1.11.7",
"vue": "^2.6.14",
"vuex": "^3.6.2"
},
"devDependencies": {
"@vue/cli-service": "^5.0.8",
"postcss-px-to-viewport": "^1.1.1"
}
}

### 问题描述

uni.addInterceptor('switchTab', {
invoke(options) {
return new Promise((resolve) => {
setTimeout(() => {
console.log('s1-invoke')
resolve(options)
}, 3000)
})
},
success(res) {
console.log('s1-success')
}
})
uni.addInterceptor('switchTab', {
invoke(options) {
return new Promise((resolve) => {
setTimeout(() => {
console.log('s2-invoke')
resolve(options)
}, 3000)
})
},
success(res) {
console.log('s2-success')
}
}
)
这段代码会在打印's1-invoke'后结束,后续的's2-invoke','s1-success','s2-success'都被阻断了,而且控制台不会有任意报错

### 重现步骤

使用拦截器拦截任意一个 api,并且添加多个异步拦截器就可以复现这个问题

### 期望行为

可以正确处理promise的链式调用,先打印's1-invoke'再打印's2-invoke','s1-success','s2-success',当然我不知道uniapp是不是不支持我使用多个异步链式调用,但是我在源代码里其实是有看到类似的多个异步链式调用处理的

### 实际行为

_No response_

### 截图或录屏

我在b站发布了一个视频进行更详细的问题说明,以下是地址:【uniapp 的拦截器有 bug 的。。。】 https://www.bilibili.com/video/BV1oeGCzwE28/?share_source=copy_web&vd_source=9fcc32460033b08131c59254afaf7a1c

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.