Firestore first ()). ToPromise () всегда дает старое значение, даже если я перезапустил с новыми изменениями - PullRequest
0 голосов
/ 15 марта 2020

У меня есть этот метод на службе:

     getUserLink(uid: string): Promise<ConnectionLinkModel> {
            return this.afs.doc<ConnectionLinkModel>
(`userConnectionLinks/${uid}`).valueChanges().pipe(first()).toPromise();
        }

Впервые работает нормально. Но допустим, что я изменил данные Firestore вручную и заново запустил этот метод (это очень важно. Я знаю, что это обещание, что оно не будет прослушивать изменения автоматически. Но почему это не дает нового значения, хотя Я перезапустил это снова.). Но это никогда не дает измененной ценности. т.е. он всегда дает старое значение. Как мне справиться с этим вариантом использования?

    ngOnInit(): void {
        const res: ConnectionLinkModel = await 
this.connectionLinkService.getUserLink(this.authService.currentUserUid);
      }

Примечание: Когда страница загружается, он снова запускается. Но это никогда не даст новую ценность. Почему?

1 Ответ

1 голос
/ 15 марта 2020

Если у вас включена постоянство , то первые данные, которые вы получите, всегда будут из локального кэша.

Из документов :

Чтобы проверить, получаете ли вы данные с сервера или из кэша, используйте свойство fromCache для SnapshotMetadata в вашем снимке событие. Если значение fromCache равно true, данные поступили из кэша и могут быть устаревшими или неполными. Если fromCache имеет значение false, данные полны и актуальны с последними обновлениями на сервере.

 getUserLink(uid: string): Promise<ConnectionLinkModel> {

                return this.afs.doc<ConnectionLinkModel>(`userConnectionLinks/${uid}`)
                                 .valueChanges()
                                 .pipe(debounceTime(1000)).pipe(first()).toPromise();
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...