Как эффективно связать Observable.subscribe в Angular 7? - PullRequest
0 голосов
/ 11 февраля 2019

Для проекта, над которым я работаю, моя команда и я используем Angular 7. Мы в некотором роде новички в Angular 7, поэтому мы все вместе узнаем о том, как работают некоторые вещи, по сравнению с AngularJS, которыймы использовали в течение нескольких лет.

Я читал некоторые рекомендации по анти-шаблонам в Observables и заметил пример, подобный следующему:

this.http.get<MyRadModel>(`api/example/rad/${this.someId}`)
  .mergeMap(radResult => {
    // ... Instructions ...
    return this.http.get<SomeOtherModel>(`api/example/other/${radResult.something}`)
  })
  .subscribe(otherResult => {
    // ... Chained instructions! ...
  });

Излишне говорить, что вы должны использовать .pipe(), чтобы сделать это в Angular 6+ из-за изменений в RxJS, так что на самом деле применение этого выглядит немного иначе ...

this.http.get<MyRadModel>(`api/example/rad/${this.someId}`)
  .pipe(
    mergeMap(radResult => {
      // ... Instructions ...

      // Problem #1: 'Property something does not exist on radResult'.
      // ... It actually *does*.
      return this.http.get<SomeOtherModel>(`api/example/other/${radResult.something}`);
    }
  )
  .subscribe(otherResult => {
    // ... Chained instructions ...
  });

Одна проблема, которую я заметил, заключается в том, чтокажется, что рекомендуемый способ создания цепочки Observables не позволяет нам использовать модели, когда мы используем mergeMap.Далее, в качестве примечания, используйте набирающую аннотацию:

.pipe(
  mergeMap(radResult: MyRadModel => {
    // Problem #2: 'Cannot find name radResult.'
  })
)

... Вызывает ошибки тоже.

Вопрос: Какой хороший способ связать Observablesв Angular 7 это позволяет мне вводить безопасность и доступ к свойствам вещей, которые мне нужно использовать в промежуточных вызовах Observable.subscribe, которые, кажется, происходят?Как уже отмечалось, ряд более ранних англоязычных руководств и рекомендаций по лучшим практикам, похоже, не работает из-за изменений в RxJS.

Примечание: Помните, что я новичок в RxJS.делать вещи;Я ветеран AngularJS.Я знаю достаточно о RxJS, чтобы знать, что знаю немного.Возможно, я применяю неправильную технику для цепочки Observable.subscribe вызовов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...