mirror of
https://github.com/noodlapp/noodl.git
synced 2026-01-11 23:02:53 +01:00
Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com> Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com> Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com> Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com> Co-Authored-By: Johan <4934465+joolsus@users.noreply.github.com> Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com> Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
48 lines
926 B
JavaScript
48 lines
926 B
JavaScript
export default class ASyncQueue {
|
|
constructor() {
|
|
this.queue = [];
|
|
this.pendingPromise = false;
|
|
}
|
|
|
|
enqueue(promise) {
|
|
return new Promise((resolve, reject) => {
|
|
this.queue.push({
|
|
promise,
|
|
resolve,
|
|
reject
|
|
});
|
|
this.dequeue();
|
|
});
|
|
}
|
|
|
|
dequeue() {
|
|
if (this.workingOnPromise) {
|
|
return false;
|
|
}
|
|
const item = this.queue.shift();
|
|
if (!item) {
|
|
return false;
|
|
}
|
|
try {
|
|
this.workingOnPromise = true;
|
|
item
|
|
.promise()
|
|
.then((value) => {
|
|
this.workingOnPromise = false;
|
|
item.resolve(value);
|
|
this.dequeue();
|
|
})
|
|
.catch((err) => {
|
|
this.workingOnPromise = false;
|
|
item.reject(err);
|
|
this.dequeue();
|
|
});
|
|
} catch (err) {
|
|
this.workingOnPromise = false;
|
|
item.reject(err);
|
|
this.dequeue();
|
|
}
|
|
return true;
|
|
}
|
|
}
|