У меня есть информация о пользователе, хранящаяся в indexedDB. Я хочу выдать сохраненные данные, а затем вызвать API для получения последней информации о пользователе. Но если нет сохраненных данных, то наблюдаемые должны ждать завершения API, но когда информация о пользователе найдена в БД, она не должна ждать, пока API завершится sh.
Независимо от того, будет ли вызван пользователь API, он обновит информацию о пользователе в базе данных.
loadUserData() {
// get from storage and api in order. If any fails return null
return concat(this.getUserDataFromDb(), this.fetchUserDetailsAPI())
.pipe(
map(user => {
this.userDetails$.next(user);
return user;
}),
catchError(err => of(null))
);
}
Я придумал это, но он ждет завершения API.
Обновление
Ранее я использовал приведенный ниже код, он работал но иногда userDetails $ испускается только один раз. Я хочу, чтобы он излучал два раза.
loadUserData() {
return from(this.getUserDataFromDb())
.pipe(
flatMap(user => {
if (user != null) {
this.userDetails$.next(user);
this.fetchUserDetailsAPI().subscribe();
return of(user);
} else {
return this.fetchUserDetailsAPI();
}
}),
)
}