@aarifkhamdi

Как в rxjs реализовать логику async/await?

Разбираюсь с rxjs, не могу понять как реализовать такую простую логику:
  1. у меня есть observable, возвращающий какие-то значения
  2. я хочу использовать эти значения и запустить последовательно два других observable
  3. вернуть значение на основе значения первого 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;
  }
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы