我有一个案例,有时会返回未知数量的图像链接。 图片网址将始终以“p [页码] .png”结尾,例如:p1.png,p2.png等。
我想做的是循环10个最大项目并从服务器获取图像,直到返回第一个404 - 然后我想存储“有问题”的项目。
最佳方法是什么? 我以为使用forkJoin然后它会立即发出数组的所有成员,而且我没有跟踪“有问题”的请求。
谢谢!
答案 0 :(得分:1)
我结束了从图像加载和错误事件创建2个observable,合并它们和订阅。对于寻找类似解决方案的任何人,这里是代码:
updatePages(pdfPages: PdfImgPage[]){
if(this.utilService.pagesAmountUnknown){
let imgUrls = [];
pdfPages.forEach(page => { imgUrls.push(this.utilService.getImgUrl(page.imgSrc))});
let imgAmount = 0;
from(imgUrls)
.pipe(
concatMap(url => {
let img = new Image();
img.src = url;
const load = fromEvent(img, 'load').pipe();
const error = fromEvent(img, 'error').pipe(switchMap(errorEvent => throwError(errorEvent)));
return merge(load,error).pipe(take(1)); //to not wait for completion
})
)
.subscribe(
img => {
this.logger.debug(`IMAGE in CONCAT MAP`, img);
imgAmount++;
},
error => {
this.logger.debug(`ERROR in CONCAT MAP imgAmount=${imgAmount}`, error);
this.completeFunc(imgAmount);
},
() => {
this.logger.debug(`COMPLETE in CONCAT MAP`);
}
);
}