请你扮演一个高级前端,告诉我axios封装了请求拦截和响应拦截,所有的接口都会走这里的拦截和响应,请求拦截中设置了vant中的toast,响应拦截中清除了toast,但是我在页面中使用toast时,想多停留几秒,而不是接口响应后就清除,该怎么设置,所有的接口都走了全局的请求拦截和响应,请你用代码实例展示
时间: 2024-04-06 18:30:19 浏览: 41
好的,我来给您演示一下。
首先,我们可以在请求拦截器中设置一个变量,用于标记是否需要延长 toast 显示时间。然后,在响应拦截器中根据这个变量来决定是否清除 toast。
下面是代码实现:
```javascript
import axios from 'axios';
import { Toast } from 'vant';
// 创建 axios 实例
const instance = axios.create({
baseURL: 'https://api.example.com',
timeout: 5000,
});
// 标记是否需要延长 toast 显示时间
let isNeedDelay = false;
// 请求拦截器
instance.interceptors.request.use(
(config) => {
// 设置 toast 显示时间
if (isNeedDelay) {
Toast.loading({
message: 'Loading...',
duration: 5000,
forbidClick: true,
});
} else {
Toast.loading({
message: 'Loading...',
forbidClick: true,
});
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
// 响应拦截器
instance.interceptors.response.use(
(response) => {
// 根据 isNeedDelay 决定是否清除 toast
if (isNeedDelay) {
setTimeout(() => {
Toast.clear();
}, 5000);
} else {
Toast.clear();
}
return response.data;
},
(error) => {
Toast.clear();
return Promise.reject(error);
}
);
export default instance;
```
在页面中使用时,如果需要延长 toast 显示时间,只需要在请求前将 isNeedDelay 设置为 true,请求完成后再将其设置为 false 即可。
```javascript
import axios from './axios';
// 设置 isNeedDelay 为 true,延长 toast 显示时间
axios.interceptors.request.use(
(config) => {
isNeedDelay = true;
return config;
},
(error) => {
return Promise.reject(error);
}
);
// 设置 isNeedDelay 为 false,恢复 toast 显示时间
axios.interceptors.response.use(
(response) => {
isNeedDelay = false;
return response.data;
},
(error) => {
isNeedDelay = false;
return Promise.reject(error);
}
);
```
这样就可以实现在页面中控制 toast 显示时间的功能了。
阅读全文