Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拒绝时取消嵌套承诺.all_Javascript_Node.js_Reactjs_Asynchronous_Es6 Promise - Fatal编程技术网

Javascript 拒绝时取消嵌套承诺.all

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)

我有一个react组件,用于将文章列表下载到localStorage

每篇文章都有一个端点,我可以点击它来获得一组图像链接,我还需要保存这些链接

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(..)中处理响应。然后(..)
。只有在所有响应都成功的情况下,您才能在那里获得所有响应的列表