Javascript 拒绝时取消嵌套承诺.all
我有一个react组件,用于将文章列表下载到localStorage 每篇文章都有一个端点,我可以点击它来获得一组图像链接,我还需要保存这些链接Javascript 拒绝时取消嵌套承诺.all,javascript,node.js,reactjs,asynchronous,es6-promise,Javascript,Node.js,Reactjs,Asynchronous,Es6 Promise,我有一个react组件,用于将文章列表下载到localStorage 每篇文章都有一个端点,我可以点击它来获得一组图像链接,我还需要保存这些链接 const getImageLinkPromise=link=>{ 返回Api.fetch(链接) 。然后(图像=>{ 如果(!this.mounted){ 返回承诺。拒绝(); } 返回图像; }); } const getArticlePromise=article=>{ 返回Api.fetch(article.imageCollectionId)
const getImageLinkPromise=link=>{
返回Api.fetch(链接)
。然后(图像=>{
如果(!this.mounted){
返回承诺。拒绝();
}
返回图像;
});
}
const getArticlePromise=article=>{
返回Api.fetch(article.imageCollectionId)
.then(imageLinks=>imageLinks.map(getImageLinkPromise)
.然后(linkPromises=>Promise.all(linkPromises))
.then(images=>//为文章获取更多数据)
}
constArticlePromises=articleData.map(getArticlePromise);
Promise.all(articlePromises).then(completeArticles=>//做一些事情);
这里有一些粗略的代码,说明了我的意思
问题是,当用户导航离开页面并且组件卸载时,我想停止任何当前运行的承诺。我通过在getImageLinkPromise
中添加一个isMounted检查来完成此操作,然后返回Promise.reject()
,如果是这样的话
即使我拒绝了这个承诺,其余的承诺仍然适用于所有文章中的所有图片
如果其中一个未通过isMounted检查,如何停止运行嵌套映像承诺
(如果在获取前检查isMounted,它们都会立即返回true).fetch()
返回承诺,而不是XHR对象。
Promise是请求的只读化身,所以无法停止请求。
请参阅一组链接
由于Promise.all()
在某个给定承诺被拒绝后将立即拒绝,因此您不应该对“我们在等待其他请求时浪费时间”有任何问题。
我认为您可能遇到的唯一问题是“在列表中的另一个承诺得到真正解决后,它将继续在某个变量中保存响应,而不再需要它”。如果是这样,您可以在promise.all(..)中处理响应。然后(..)
。只有在所有响应都成功的情况下,您才能在那里获得所有响应的列表