Проще говоря, я постоянно сталкиваюсь с препятствиями с помощью RXJS, потому что почти каждый пример опирается на постоянный поток данных, тогда как я делаю HTTP-запросы, которые имеют единственную природу.
Мой общий сценарий таков:иметь сервис, который делает вызовы API и обновляет необходимых потребителей.В моей голове это похоже на простое излучение событий.Подписчики подключаются и ждут события - как только они его получают, они уходят и делают свое дело отдельно.
Проблема, как я уверен, вы знаете, заключается в том, что подписки HTTP прекращаются сразу же после завершения и «подключение» запускает его немедленно.Это концепция RXJS, которую я все еще пытаюсь обернуть вокруг себя.
Поэтому, когда вы добавляете параллельные вызовы метода, потребители полагаются на других потребителей, разветвления и асинхронный ад - я пробовал все видымерзости с участием субъектов, повторов, общих карт.В конце концов я остановился на чем-то вроде этого:
myBehaviorSubject = new BehaviorSubject<Result>(null);
myBehaviorSubject$ = myBehaviorSubject.asObservable()
...
getData(params): Observable<Result[]> {
const http$ = this.httpClient
.get('blah', {params})
.pipe(map(response => response as Result[]));
http$.subscribe(result: Result => {
myBehaviorSubject.next(result);
});
return myBehaviorSubject$;
}
Кажется ... неправильно .Я знаю, что такие вещи, как mergeMap, обрабатывают внутренние подписки аналогично, и наблюдаемые более высокого порядка не являются анти-паттернами, но я не могу не думать, что просто делаю это неправильно.
Действительно ли внутренние подписки - способ сделать это?Существуют ли способы заставить потребителей ждать HTTP-запросов, не делая избыточных вызовов на сервер?
Может кто-нибудь пролить свет на этот вопрос?