Я пытаюсь заполнить хранилище ngrx данными, запрашиваемыми из API и отформатированными следующим кодом
Служба API
getMaterialImagesByMaterialId(id: string){
const images: Array<MaterialImage> = new Array<MaterialImage>();
this.getImageData(id)
.pipe(
pluck('value')
)
.subscribe(data => {
const postBody = Array<PostBodyItem>();
for(const img of data) {
postBody.push({ItemType: "Image", ItemId: img.ImageId});
}
this.getImageMedia(postBody).subscribe(media => {
for(let i = 0; i < media.length; i++) {
const image: MaterialImage = {
id: data[i].ImageId,
createdBy: data[i].AliasUser.FirstName + " " + data[i].AliasUser.LastName,
title: media[i].Title,
description: data[i].Description,
timestamp: data[i].SmpteTime,
url: media[i].StreamingUrl,
output: 'FOOBAR'
};
images.push(image);
}
});
}
);
console.log(images);
return images;
}
private getImageData(id: string) {
const url = `...`;
const headers = new HttpHeaders().set('UseBasicAuth', 'true');
return this.http.get<MaterialImageResponse>(url, {headers})
.pipe(
switchMap(data => {
this.loggerService.log(`Retrieved ${this.entityName}`);
return of(data);
}),
catchError(error => this.handleError(`Retrieving ${this.entityName} Failed`, error))
);
}
private getImageMedia(body: Array<PostBodyItem>){
const url = '...';
const headers = new HttpHeaders().set('UseBasicAuth', 'true');
return this.http.post(url, body, {headers})
.pipe(
switchMap(data => {
this.loggerService.log(`Retrieved ${this.entityName}`);
return of(data);
}),
catchError(error => this.handleError(`Retrieving ${this.entityName} Failed`, error))
);
}
image.effect
@Injectable()
export class MaterialImagesEffects {
constructor(private materialImagesActions$: Actions, private api$: MaterialImageResource)
{}
load$: Observable<Action> = createEffect(() =>
this.materialImagesActions$.pipe(
ofType(materialImagesActions.LOAD_IMAGES),
switchMap(action => {
return [
materialImagesActions.LOAD_IMAGES_SUCCESS({
materialImages:this.api$.getMaterialImagesByMaterialId(action.materialId.toString())
})
];
})
)
);
}
У кого-нибудь есть понимание того, почему LOAD_IMAGE_SUCCESS будет запускать, но не заполнять хранилище сгенерированным содержимым?
Я думаю, что существует некоторая форма состояния гонки, так что если это так, как бы Я исправлю это?