We refer lib https://github.com/breeze2/async-task-throttle Also, we modify async-task-throttle to support rate limit on response
$ yarn add async-task-throttle
import AsyncTaskThrottle from 'async-task-throttle'
function task (url) {
return fetch(url)
}
const throttleTask = AsyncTaskThrottle.create(task, 6, 100)
// use `throttleTask` just like `task`
// but up to 6 tasks are running at the same moment
throttleTask('https://github.com/breeze2/markdown-it-all').then(value => {
console.log(value)
}).catch(error => {
console.error(error)
})
function AsyncTaskThrottle.create(
task: T extends (...args: any[]) => Promise<any>,
rateLimitCount?: number = 1,
rateLimitDuration?: number = 5000,
max: number = Infinity
): T
- task: the async task function.
- rateLimitCount: defualt 1, at the same moment, up to
rateLimitCount
tasks are runing, others are in the waiting queue. - rateLimitDuration: default 5000, make
rateLimitCount
request everyrateLimitDuration
.
Note: Timer from last asynchronous task resolution time
- max: defualt Infinity, when the length of waiting queue is greater than
max
, late tasks will be rejected instantly.