const EventEmitter = require('events');
let builder = x => async () => Promise.resolve(x);
let tasks = Array.from({ length:1120 }).map((_, k) => builder(console.log(${k})
))
function sleep(milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
};
const getRandom = async () => {
sleep(300)
return Math.random() > 0.1;
}
class Queue extends EventEmitter {
constructor() {
super();
this._index = 0;
this._start();
}
_start() {
this._timer = setTimeout(async () => {
const source = await tasks[this._index]()
this.emit('next', source);
this._index++;
this._start();
}, 0);
}
_stop(){
clearTimeout(this._timer)
}
};
let q = new Queue();
q.on('next', async (source) => {
(new Function(source))()
});
setTimeout(()=>{
q._stop()
}, 100)
近期评论