Skip to content

Instantly share code, notes, and snippets.

@matthewsuan
Last active March 28, 2024 12:36
Show Gist options
  • Save matthewsuan/2bdc9e7f459d5b073d58d1ebc0613169 to your computer and use it in GitHub Desktop.
Save matthewsuan/2bdc9e7f459d5b073d58d1ebc0613169 to your computer and use it in GitHub Desktop.
Axios request queue-like that limits number of requests at any given time
import axios from 'axios'
const MAX_REQUESTS_COUNT = 5
const INTERVAL_MS = 10
let PENDING_REQUESTS = 0
// create new axios instance
const api = axios.create({})
/**
* Axios Request Interceptor
*/
api.interceptors.request.use(function (config) {
return new Promise((resolve, reject) => {
let interval = setInterval(() => {
if (PENDING_REQUESTS < MAX_REQUESTS_COUNT) {
PENDING_REQUESTS++
clearInterval(interval)
resolve(config)
}
}, INTERVAL_MS)
})
})
/**
* Axios Response Interceptor
*/
api.interceptors.response.use(function (response) {
PENDING_REQUESTS = Math.max(0, PENDING_REQUESTS - 1)
return Promise.resolve(response)
}, function (error) {
PENDING_REQUESTS = Math.max(0, PENDING_REQUESTS - 1)
return Promise.reject(error)
})
export default api
@Jsurapong
Copy link

Thanks.

@vdelacou
Copy link

vdelacou commented May 3, 2022

You are a genius

@logsol
Copy link

logsol commented Nov 9, 2022

Thank you so much for this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment