1import axios from 'axios'
2
3const MAX_REQUESTS_COUNT = 5
4const INTERVAL_MS = 10
5let PENDING_REQUESTS = 0
6
7// create new axios instance
8const api = axios.create({})
9
10/**
11 * Axios Request Interceptor
12 */
13api.interceptors.request.use(function (config) {
14 return new Promise((resolve, reject) => {
15 let interval = setInterval(() => {
16 if (PENDING_REQUESTS < MAX_REQUESTS_COUNT) {
17 PENDING_REQUESTS++
18 clearInterval(interval)
19 resolve(config)
20 }
21 }, INTERVAL_MS)
22 })
23})
24
25/**
26 * Axios Response Interceptor
27 */
28api.interceptors.response.use(
29 function (response) {
30 PENDING_REQUESTS = Math.max(0, PENDING_REQUESTS - 1)
31 return Promise.resolve(response)
32 },
33 function (error) {
34 PENDING_REQUESTS = Math.max(0, PENDING_REQUESTS - 1)
35 return Promise.reject(error)
36 })
37
38export default api