我有一个这样的对象:
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]
}
如何才能做到这一点?
1条答案
按热度按时间mzaanser1#
可以使用扫描操作符(https://rxjs.dev/api/operators/scan)“保存”对象状态。
将扫描操作符与BehaviourSubject或Subject一起使用,每次更新图像时,请调用subject.next()。
每次主体发射时,您都要替换扫描操作符中的对象,以获得最新更新的对象。