我有返回Promise的父函数。在父函数中,我使用bluebird-retry包执行另一个(嵌套的)promise,仅出于开发目的,该promise目前总是拒绝。
因此,我正在调用函数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次,并在2100ms(100ms超时和4 x 500ms间隔)后拒绝错误。
但是,在2000毫秒之后,我根据父函数返回的承诺调用了bluebird .cancel
方法。
在父函数的上方,我有onCancel,它假设停止重试并拒绝错误。但是,此操作无法正常运行,因为它不会停止重试。 my code的输出是:
家长叫来
被召唤的孩子
被召唤的孩子
被召唤的孩子
在父函数中注册的取消
发出停止::所有事件
抓到停止::所有事件
被召唤的孩子
但是它应该没有最后一个“ CALLED CHILD”。