1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- const RateLimitedQueue = require('./RateLimitedQueue')
- const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
- describe('RateLimitedQueue', () => {
- let pending = 0
- function fn () {
- pending++
- return delay(15).then(() => pending--)
- }
- it('should run at most N promises at the same time', async () => {
- const queue = new RateLimitedQueue(4)
- const fn2 = queue.wrapPromiseFunction(fn)
- const result = Promise.all([
- fn2(), fn2(), fn2(), fn2(),
- fn2(), fn2(), fn2(), fn2(),
- fn2(), fn2()
- ])
- expect(pending).toBe(4)
- await delay(10)
- expect(pending).toBe(4)
- await result
- expect(pending).toBe(0)
- })
- it('should accept Infinity as limit', () => {
- const queue = new RateLimitedQueue(Infinity)
- const fn2 = queue.wrapPromiseFunction(fn)
- const result = Promise.all([
- fn2(), fn2(), fn2(), fn2(),
- fn2(), fn2(), fn2(), fn2(),
- fn2(), fn2()
- ])
- expect(pending).toBe(10)
- return result.then(() => {
- expect(pending).toBe(0)
- })
- })
- it('should accept non-promise function in wrapPromiseFunction()', () => {
- const queue = new RateLimitedQueue(1)
- function syncFn () { return 1 }
- const fn2 = queue.wrapPromiseFunction(syncFn)
- return Promise.all([
- fn2(), fn2(), fn2(), fn2(),
- fn2(), fn2(), fn2(), fn2(),
- fn2(), fn2()
- ])
- })
- })
|