首页 > 解决方案 > 当父母被取消时,是否可以取消孩子承诺?

问题描述

我有这段代码(使用 Bluebird Promise):

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

当我这样做时promise.cancel()getSomething它被取消了,但getSomethingParent不是。

有没有办法,当getSomethingPromise 被取消时,我也可以得到getSomethingParentPromise 的取消?

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

标签: javascriptpromisebluebirdcancellation

解决方案


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

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即使在结算后也可以取消。


推荐阅读