Angular 按顺序发出可观察项,直到第一次返回错误
我有一个案例,在这个案例中,有时会返回未知数量的图像链接。 图像URL将始终以p[页码].png结尾,例如:p1.png、p2.png等 我想做的是循环最多10个项目,从服务器获取图像,直到返回第一个404-然后我想存储有问题的项目 最好的方法是什么? 我想使用forkJoin,但是它会立即发出数组的所有成员,我没有问题请求的痕迹Angular 按顺序发出可观察项,直到第一次返回错误,angular,rxjs,observable,Angular,Rxjs,Observable,我有一个案例,在这个案例中,有时会返回未知数量的图像链接。 图像URL将始终以p[页码].png结尾,例如:p1.png、p2.png等 我想做的是循环最多10个项目,从服务器获取图像,直到返回第一个404-然后我想存储有问题的项目 最好的方法是什么? 我想使用forkJoin,但是它会立即发出数组的所有成员,我没有问题请求的痕迹 谢谢 我结束了从图像加载和错误事件中创建两个可观察的事件,合并它们并订阅。对于寻求类似解决方案的任何人,以下是代码: updatePages(pdfPages: Pd
谢谢 我结束了从图像加载和错误事件中创建两个可观察的事件,合并它们并订阅。对于寻求类似解决方案的任何人,以下是代码:
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`);
}
);
}
看看