| 12345678910111213141516171819202122232425262728293031 |
- let LoadingTasks = (() => {
- let activeTask = null;
- let tasks = [];
- let runNextTask;
- runNextTask = function() {
- if (activeTask || tasks.length === 0)
- return;
- activeTask = (tasks.shift());
- let taskResult = activeTask.fnc();
- if (!(taskResult instanceof Promise))
- taskResult = Promise.resolve(activeTask);
- taskResult.then(() => {
- let ok = activeTask.ok;
- activeTask = null;
- ok(taskResult.result);
- runNextTask();
- });
- };
- return {
- push: async function(task) {
- return new Promise((ok, ko) => {
- tasks.push({ fnc: task, ok: ok, ko: ko });
- runNextTask();
- });
- }
- };
- })();
|