Вызов Firebase не обновляет значение - PullRequest
1 голос
/ 16 января 2020

У меня проблема с обновлением значения в firebase. Вот сценарий и код: я использую forEach l oop для некоторых данных, около 300 записей. Я обновляю состояние локально, и в функции обратного вызова у меня есть функция, которая выполняет этот код (частично).

.then(memKey => {
  this.setState({
    memberKeyID: memKey,
    family: {[memKey]: [first, last, 'Head of house']},
    memberSaved: true,
    readOnly: true
  }, () => {
    this.props.firebase.getMemberCount(currentOrganization).once('value')
                      .then(count => {
                        console.log(count.val());
                        if(count.val()) {
                          const countTotal = count.val() + 1;
                          return countTotal;
                        } else {
                          return 1;
                        }
                      })
                      .then(memberCount => {
                        console.log(memberCount);
                        this.props.firebase.setMemberCount(currentOrganization, memberCount)
                      })
  })
})

Я звоню на getMemberCount, который в то время возвращает 5, когда мы console.log (count .val ()) Я получаю «5». Поэтому, выходя из этого, я ожидал, что когда я вызову next затем и передам memberCount, я установлю обновленное значение.
В примере: при первом запуске countTotal = 5 + 1; должен вернуть 6, затем в следующий раз countTotal = 6 + 1 et c. Однако это не так. Я получаю 5 за количество записей, которые мы l oop. Когда данные содержат 300 записей, консоль 5 регистрируется 300 раз.
Что мне здесь не хватает?

1 Ответ

2 голосов
/ 16 января 2020

Это потому, что вызов setMemberCount будет асинхронным и завершится через некоторое время, возможно, после завершения l oop. Обновленное значение не будет видно сразу после следующей итерации l oop, которая вызывает getMemberCount. Если вы хотите просмотреть обновленные данные, вам следует подождать, пока обещание не разрешится из любого кода внутри setMemberCount, который фактически выполняет обновление. В противном случае, если вы не дождетесь этого обещания, база данных не будет полностью обновлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...