class RequestQueue {
constructor({
queue,
request,
finishCallback,
}) {
this.queue = queue
this.finishCB = finishCB
}
finish() {
typeof this.finishCallback === function && this.finishCallback()
}
checkFinish() {
return this.queue.length === 0
}
push() {
}
shift() {
return this.queue.shift()
}
start() {
if (this.checkFinish()) {
this.finish()
}
let request = this.shift()
typeof request === 'function' && request().then(() => {
console.log('start then')
this.start()
}).catch(err => {
console.log('err', err)
})
}
}
function handleRequest(payload) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('request ', payload, 'success')
resolve()
}, 1)
})
}
new RequestQueue({
queue: [1, 2, 3, 4, 5, 6].map(payload => () => handleRequest(payload))
}).start()