Обещание отменить попытку синей птицы - PullRequest
0 голосов
/ 04 июня 2019

У меня есть родительская функция, которая возвращает Promise.В родительской функции я использую пакет bluebird-retry для выполнения другого (вложенного) обещания, которое в настоящее время только для целей разработки всегда отклоняется.

Поэтому я вызываю функцию parent, которая выполняется4 раза child.Код родительской функции:

const parent = () => {
    return new Promise((resolve, reject, onCancel) => {
        setTimeout(async() => {
            console.log('CALLED PARENT');
            try {
                await retry(child, { max_tries: 4, interval: 500 })
            } catch (e) {
                reject(new Error('Rejected from parent function'));
            }
        },100);

        onCancel(() => {
            console.log('Registered cancel in parent function');
            retry.StopError(new Error('Stop retrying child'));
            reject(new Error('Cancelled parent'));
        });
    });
};

Поэтому, если child() всегда отклонять, он будет пытаться выполнить 4 раза, а после 2100 мс (время ожидания 100 мс и интервал 4 x 500 мс) будет отклоняться ошибка.

Однако после 2000 мс я вызываю метод bluebird .cancel по обещанию, возвращенному из родительской функции.

Внутри родительской функции у меня есть onCancel, который предполагает прекратить повторную попытку иотклонить ошибку.Однако это не работает, как ожидалось, потому что это не останавливает повторную попытку.Вывод мой код :

ВЫЗЫВАЕМЫЙ РОДИТЕЛЬ

ВЫЗЫВАЕМЫЙ РЕБЕНОК

ВЫЗЫВАЕМЫЙ РЕБЕНОК

ВЫЗЫВАЕМЫЙ РЕБЕНОК

Зарегистрированная отмена в родительской функции

Стоп выброса :: все события

Пойманный останов :: все события

ВЫЗОВ РЕБЕНКА

ноПредполагается, что без последнего «CALLED CHILD».

...