Angular 按顺序发出可观察项,直到第一次返回错误

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

我有一个案例,在这个案例中,有时会返回未知数量的图像链接。 图像URL将始终以p[页码].png结尾,例如:p1.png、p2.png等

我想做的是循环最多10个项目,从服务器获取图像,直到返回第一个404-然后我想存储有问题的项目

最好的方法是什么? 我想使用forkJoin,但是它会立即发出数组的所有成员,我没有问题请求的痕迹


谢谢

我结束了从图像加载和错误事件中创建两个可观察的事件,合并它们并订阅。对于寻求类似解决方案的任何人,以下是代码:

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`);
          }
        );
    }
看看