mirror of
https://github.com/noodlapp/noodl.git
synced 2026-01-12 07:12:52 +01:00
Initial commit
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>
This commit is contained in:
47
packages/noodl-viewer-react/src/async-queue.js
Normal file
47
packages/noodl-viewer-react/src/async-queue.js
Normal file
@@ -0,0 +1,47 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user