Rx js кэширование и обновление одновременно - PullRequest
0 голосов
/ 03 мая 2020

У меня есть информация о пользователе, хранящаяся в 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();
                    }
                }),
            )
    }
...