axiosCache.ts 862 B

1234567891011121314151617181920212223242526272829303132
  1. import { AxiosInstance } from "axios";
  2. export default function (axios: AxiosInstance, regexes: [RegExp] | []) {
  3. // cachingGet
  4. const cache = new Map();
  5. return function cachedGet(url: string) {
  6. const key = url;
  7. if (regexes.some((regex) => url.match(regex))) {
  8. if (cache.has(key)) {
  9. const request = cache.get(key);
  10. // console.log("cache.get(key):" + request.then(v => console.log(v)));
  11. return request;
  12. } else {
  13. // @ts-ignore
  14. const request = axios.get(...arguments);
  15. return request.then((v) => {
  16. if (v.status === 200) {
  17. // 如果能取到数据,才缓存
  18. cache.set(key, request);
  19. }
  20. return request;
  21. });
  22. }
  23. } else {
  24. // @ts-ignore
  25. const request = axios.get(...arguments);
  26. return request;
  27. }
  28. };
  29. }