我有以下代码(使用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
解决后,也可以取消此操作。