JavaScript Promise.all - 如何检查解析状态?
Posted
技术标签:
【中文标题】JavaScript Promise.all - 如何检查解析状态?【英文标题】:JavaScript Promise.all - how to check resolve status? 【发布时间】:2018-11-11 18:32:30 【问题描述】:假设我有一个 promises 数组,每个元素都是一个 AJAX 调用,用于获取视图的图像 (png)。
const images = Promise.all(views.map(view =>
return fetch(`/sites/$siteId/views/$view.id/image/`);
));
是否有可能使用 Promise.all 检查承诺解决的当前状态?如果没有,还有其他方法吗?
例如,如果下载了 10 / 20 张图片,我想给用户一个反馈,我们已经为他下载了 50% 的图片。
【问题讨论】:
【参考方案1】:只要 promise 解决,就增加一个变量:
const promises = views.map(view => fetch (`/sites/$siteId/views/$view.id/image/`));
const images = Promise.all(promises);
let progress = 0;
promises.forEach(p => p.then(() => progress++));
setInterval(() =>
console.log(progress / promises.length * 100 + "%");
, 1000);
【讨论】:
@rafal 很高兴为您提供帮助 :) 我不能这样做吗let progress = 0; const images = Promise.all(views.map(view => return fetch(`/sites/$siteId/views/$view.id/image/`).then(() => progress++); ));
【参考方案2】:
无需使用setInterval
。仅在更新时更新进度。
const promises = views.map(view => fetch (`/sites/$siteId/views/$view.id/image/`));
const images = Promise.all(promises);
let progress = 0;
promises.forEach(p => p.then(() =>
progress++;
console.log(progress / promises.length * 100 + "%");
));
【讨论】:
以上是关于JavaScript Promise.all - 如何检查解析状态?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 像 Java 8 上的“Promise.all”(可能带有 lambdas)
JavaScript Promise.all - 如何检查解析状态?