let tail: Promise<void> = Promise.resolve();

/**
 * Ставит функцию в очередь на выполнение. 
 * Все функции выполняются последовательно, одна за другой. 
 * Если функция выбрасывает ошибку, она логируется, 
 * а выполнение очереди продолжается
 * @param fn функция 
 */
export const runTaskInQueue = (fn: () => Promise<void>) => {
    tail = tail.then(fn).catch((e) => {
        console.error("Dialog queue error", e);
    });
};

/**
 * Ждет, пока все пакеты попадающие в очередь не будут обработаны
 */
export const whenFinish = () => tail;