typescript 更新对象中的值并将整个对象作为Observable返回

xytpbqjk  于 2023-03-09  发布在  TypeScript
关注(0)|答案(1)|浏览(131)

我有一个这样的对象:

const obj: SomeType = {
  images: {imageOrder1: imageLink, imageOrder2: imageLink},
  imageOrder: [imageOrder1, imageOrder2]
}

我需要更新obj.images数组中的每个图像(将其上传到某个地方),并将整个obj作为观察对象返回。

defer(() => of(obj)).pipe(
   map(objs => obj.imageOrder),
   switchMap(imageOrder => from(imageOrder)),
   concatMap(order => {
  
       const image = imageUrls[order];

       return [order, uploadImage(image)];
   }),
   toArray(),
   map(uploadResult => {
       const [view, imageUploadResult] = uploadResult;
  
  // return an updated object with new links 
        
})

);
这将导致:

obj: Observable<obj> = {
   images: {imageOrder1: updatedImage, imageOrder2: updatedImage},
   imageOrder: [imageOrder1, imageOrder2]
}

如何才能做到这一点?

mzaanser

mzaanser1#

可以使用扫描操作符(https://rxjs.dev/api/operators/scan)“保存”对象状态。
将扫描操作符与BehaviourSubject或Subject一起使用,每次更新图像时,请调用subject.next()。
每次主体发射时,您都要替换扫描操作符中的对象,以获得最新更新的对象。

相关问题