Разбираюсь с rxjs, не могу понять как реализовать такую простую логику:
- у меня есть observable, возвращающий какие-то значения
- я хочу использовать эти значения и запустить последовательно два других observable
- вернуть значение на основе значения первого observable
Как заменить значение obs1 на другое разобрался - map. А как внутри obs2 дождаться выполнения двух других observable не понимаю
updateAvatar(
@Headers() headers: { authorization: string },
@CurrentUserId() currentUserId: string,
@UploadedFile() avatarFile: Express.Multer.File,
): Observable<{ avatarUrl: string }> {
const obs1 = this.gcpPubSubClient.send(
PostCommands.uploadImage,
new UploadImageCommandRequst(
currentUserId,
avatarFile.originalname,
'avatars',
true,
),
);
const obs2 = obs1.pipe(
map(({ imageUploadUrl, imageUrl }) => {
// здесь нужен await
this.httpService.put(imageUploadUrl, avatarFile.buffer);
// здесь тоже нужен await
this.httpService.patch(
`${this.config.GATEWAY_URL}/user/profile`,
{
avatarUrl: imageUrl,
},
{ headers: { authorization: headers.authorization } },
);
return {
avatarUrl: imageUrl,
};
}),
);
return obs2;
}