Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Simple queue using async/await

Queue using async/await

Implement a queue using async/await.

I created a single instance, easy enough to convert to a factory if you want multiple queues or add features like timeout with configuration object.

Although this solution is simple and does not require any additional libraries I do not think it is robust. For example retries after errors or timeouts is not supported. Rather than solve these issues it makes more sense to look at proven solutions such as message/task queues.

Usage

Add processing function to queue, here I'm using sequelize ORM with my processing:

import queue from './queue';

queue.push(() =>
    models.Method.insertFile({
      file: base,
      ...data,
    })
      .then(result => console.log('db saved', base))
      .catch(err => console.error('db error', base))
  );
const queue = {
queue: [],
started: false,
push(...args) {
args.forEach(f => {
if (typeof f === 'function') {
this.queue.push(f);
}
});
if (!this.started) {
this.start();
}
},
async start() {
this.started = true;
while (this.queue.length !== 0) {
await this.queue[0]();
this.queue.shift();
}
this.started = false;
},
};
export default queue;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.