Последовательную очередь можно построить цепочкой Promise, сохраняя хвост и добавляя следующую задачу после него.
Как можно реализовать очередь задач через промисы без флагов и счётчиков? Что такое worker в контексте такой очереди?
Последовательную очередь можно построить цепочкой Promise, сохраняя хвост и добавляя следующую задачу после него.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Последовательную очередь можно построить цепочкой Promise, сохраняя хвост и добавляя следующую задачу после него.
Задача передаётся как функция, чтобы она не стартовала заранее. Ошибка возвращается вызывающему коду, но не останавливает всю очередь.
function createQueue() {
let tail = Promise.resolve();
return task => {
const result = tail.then(() => task());
tail = result.catch(() => {});
return result;
};
}
Worker в таком контексте — логический исполнитель, который берёт следующую задачу после предыдущей; это не обязательно Web Worker или отдельный поток. Для параллельности создают ограниченное число исполнителей.