【发布时间】:2018-06-26 18:51:03
【问题描述】:
我有一个反应组件,它负责将文章列表下载到 localStorage。
每篇文章都有一个端点,我可以点击它来获取一组图片链接,我还需要保存这些链接。
const getImageLinkPromise = link => {
return Api.fetch(link)
.then(image => {
if (!this.mounted) {
return Promise.reject();
}
return image;
});
}
const getArticlePromise = article => {
return Api.fetch(article.imageCollectionId)
.then(imageLinks => imageLinks.map(getImageLinkPromise)
.then(linkPromises => Promise.all(linkPromises))
.then(images => //fetch some more data for the article)
}
const articlePromises = articleData.map(getArticlePromise);
Promise.all(articlePromises).then(completeArticles => // do stuff);
这里有一些粗略的代码说明我的意思
问题是,当用户离开页面并卸载组件时,我想停止任何当前正在运行的承诺。我通过在 getImageLinkPromise 中添加对 isMounted 的检查来做到这一点,如果是,则返回 Promise.reject()。
即使我拒绝了这个承诺,其余的承诺仍然适用于所有文章中的所有图像。
如果其中一个未通过 isMounted 检查,我如何阻止嵌套图像承诺运行?
(如果我在获取它们之前检查 isMounted,它们都会立即返回 true)
【问题讨论】:
标签: javascript node.js reactjs asynchronous es6-promise