1
0

taskQueue.js 782 B

12345678910111213141516171819202122232425262728293031
  1. let LoadingTasks = (() => {
  2. let activeTask = null;
  3. let tasks = [];
  4. let runNextTask;
  5. runNextTask = function() {
  6. if (activeTask || tasks.length === 0)
  7. return;
  8. activeTask = (tasks.shift());
  9. let taskResult = activeTask.fnc();
  10. if (!(taskResult instanceof Promise))
  11. taskResult = Promise.resolve(activeTask);
  12. taskResult.then(() => {
  13. let ok = activeTask.ok;
  14. activeTask = null;
  15. ok(taskResult.result);
  16. runNextTask();
  17. });
  18. };
  19. return {
  20. push: async function(task) {
  21. return new Promise((ok, ko) => {
  22. tasks.push({ fnc: task, ok: ok, ko: ko });
  23. runNextTask();
  24. });
  25. }
  26. };
  27. })();