У меня есть родительская функция, которая возвращает 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».