Для проекта, над которым я работаю, моя команда и я используем 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
вызовов.