Подпишитесь два раза на одну наблюдаемую - PullRequest
0 голосов
/ 04 июня 2019

первая функция:

updateMark(item: MarkDTO) {
    this.service
      .put(item, this.resource)
      .subscribe(() => this.markEdit = null);
  }

вторая функция:

put(item: MarkDTO, rcc: string): Observable<MarkDTO> {
    const rdto = new MarkRDTO(item);
    const url = `${this.getUrl('base')}${rcc}/marks/${rdto.rid}`;
    const obs = this.http.put<MarkDTO>(url, rdto, { withCredentials: true })
      .pipe(map((r: MarkDTO) => new MarkDTO(r)))
      .share();
    obs.subscribe(newMark => this.storage.update(newMark, rcc));
    return obs;
  }

в обслуживании Мне нужно обновить данные после запроса

, но в то же время мне нужноочистить текущий editItem

все это должно быть сделано после того, как я подпишусь на один httpRequest

.share () - поддержка из пакета rxjs-compat (я хочу удалить это dep в ближайшее время)

без .share () - работает только 1 из 2 шагов

текущая версия rxjs - 6.3.3

Помогите, кто может ...

1 Ответ

1 голос
/ 04 июня 2019

Существует конвейерный оператор share , который вы использовали бы так же, как вы используете map() (то есть внутри pipe()) и, следовательно, не нуждаетесь в rxjs-compat.

Но вам не нужно share() здесь.Все, что вам нужно, это оператор tap() :

put(item: MarkDTO, rcc: string): Observable<MarkDTO> {
    const rdto = new MarkRDTO(item);
    const url = `${this.getUrl('base')}${rcc}/marks/${rdto.rid}`;
    return this.http.put<MarkDTO>(url, rdto, { withCredentials: true })
      .pipe(
         map(r => new MarkDTO(r)),
         tap(newMark => this.storage.update(newMark, rcc))
      );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...