async-singleton
make async/promise function execute only one at a time.
Usage
singleton
const asyncSingleton = require('async-singleton')
const delay = msec => new Promise(resolve => setTimeout(resolve, msec))
async function countUp (n = 0) {
for (let i = 0; i < 5; i++) {
console.log(n + i)
await delay(100)
}
}
const singleCountUp = asyncSingleton(countUp)
singleCountUp(0)
singleCountUp(10)
await singleCountUp(20)
singleCountUp(30)
result
0
1
2
3
4
30
31
32
33
34
trailing
When the function being executed is finished, it is executed only once at the last.
const singleCountUp = asyncSingleton(countUp, {trailing: true})
singleCountUp(0)
singleCountUp(10)
singleCountUp(20)
singleCountUp(30)
result
0
1
2
3
4
30
31
32
33
34