Фон
В компоненте Angular мне нужно загрузить некоторые настройки перед загрузкой данных, поэтому у меня есть следующий код:
constructor(
private dataService: DataService,
settingsService: SettingsService
) {
settingsService.get().subscribe({
next: (settings) => this.settings = settings
});
}
onInit() {
this.loadData();
}
loadData() {
this.dataService.get(this.settings).subscribe({
next: (data) => this.data = data
});
}
Как видите, this.settings
должен быть загружен перед для вызова loadData()
, который вызывается при инициализации и впоследствии, когда пользователь нажимает кнопку. В то время как settingsService.get()
вызывается только один раз в начале, this.dataService.get()
может вызываться много раз.
Проблема
Первый вызов loadData()
от onInit()
был вызван до завершения settingsService.get()
, поэтому параметр не определен, и я получаю сообщение об ошибке.
Вопрос
Как мне синхронизировать их для этой конкретной ситуации?
ПРИМЕЧАНИЕ
Есть аналогичный вопрос в Angular — сделать несколько HTTP-вызовов последовательно, но я считаю, что это другой сценарий, потому что в этом случае оба наблюдателя вызываются каждый раз вместе, последовательно. В данном конкретном случае мне нужно синхронизировать их только в первый раз, поэтому я не понимаю, как здесь можно использовать switchMap
. Я не эксперт RXJS, поэтому, если я не прав, буду рад совету. Спасибо.
Спасибо @Daniel Gimenez, но я не вижу в этом примере, как сделать последующие вызовы
this.dataService.get()
без вызоваthis.settingsService.get()
вместе через переменнуюdata$
При каких обстоятельствах вам нужно снова позвонить по
this.dataService.get()
? Настройки меняются?Привет, @DeborahK, этот код является минимальным воспроизводимым примером. На самом деле
this.dataService.get()
содержит больше параметров, которые зависят от взаимодействия с пользователем. Так что да, настройки меняются.Вы можете определить потоки «действия». Вот статья: tomastrajan.medium.com/… У меня есть пример на github (с использованием нумерации страниц вместо настроек, но идея та же): github.com/DeborahK/Angular- ActionStreams Вот выступление на эту тему: youtube.com/watch?v=OKZBHuYa-wc