Skip to content

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

@fhaskla

Description

@fhaskla

发行方式

小程序

具体平台

微信小程序

开发环境

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions