我有以下代码(使用Bluebird Promise):

const promise = loadSomething(id)
  .then(something => {
    loadParentOfSomething(something.parentId);
    return something;
  });


然后,当我执行promise.cancel()时,getSomething被取消,但getSomethingParent未被取消。

有什么方法可以取消getSomething许诺时,也可以取消getSomethingParent许诺?

这两个加载函数都返回一个带有HTTP请求的可取消的异步承诺,而我想取消它们的原因是因为它们有时可能需要一段时间才能加载,并且例如当用户导航(SPA)时不再需要响应。

最佳答案

我认为您实际上在寻找什么

const promise1 = loadSomething(id);
const promise2 = promise1.then(something => { return loadParentOfSomething(something.parentId); });
//                                            ^^^^^^
promise2.catch(e => void "ignore"); // prevent unhandled rejections


然后,您可以继续使用promise1访问结果,也可以调用promise2.cancel()。即使在promise1解决后,也可以取消此操作。

07-24 09:43
查看更多