承诺取消重试蓝鸟

时间:2019-06-04 16:17:34

标签: javascript promise bluebird cancellation

我有返回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”。

0 个答案:

没有答案