Проверьте, существует ли пользователь в Firestore перед попыткой дальнейшей обработки - PullRequest
0 голосов
/ 19 марта 2019

Я написал собственный скрипт реферала на своем веб-сайте, и пользователи иногда жаловались, что их referralId перезаписывается, поэтому они теряют все накопленные баллы за определенный период времени.Я хочу, чтобы это не происходило, включив проверку, чтобы увидеть, существует ли uid перед попыткой обновления.

Есть ли способ проверить, существует ли uid пользователя с действительным идентификатором реферала перед выполнением этого?командовать дальше?Я думаю, что проблема возникает здесь:

  processUser(result, firstName, lastName) {
    const referralId = this.utilService.generateRandomString(8);
    this.setUserData(result.user);
    this.setUserDetailData(result.user.uid, firstName, lastName, referralId);
    this.referralService.addUserToWaitlist(referralId);
  }

Есть ли способ для меня, чтобы проверить это заранее?Моя структура таблицы ниже:

enter image description here

1 Ответ

1 голос
/ 19 марта 2019

Чтобы проверить, существует ли документ, и писать только, если его нет, вы обычно используете транзакцию.См. https://firebase.google.com/docs/firestore/manage-data/transactions#transactions. Оттуда:

db.runTransaction(function(transaction) {
    // This code may get re-run multiple times if there are conflicts.
    return transaction.get(sfDocRef).then(function(sfDoc) {
        if (!sfDoc.exists) {
            throw "Document does not exist!";
        }

        var newPopulation = sfDoc.data().population + 1;
        transaction.update(sfDocRef, { population: newPopulation });
    });
})

Обратите внимание, что вы также можете объединить данные пользователя с существующими данными в документе, чтобы избежать необходимости транзакции.Например:

userRef.set({ 
  firstName: firstName, lastName: lastName, referralId: referralId
}, { merge: true });

Я не уверен, достаточно ли это для вашего варианта использования, но определенно проверьте его, так как код проще, чем для транзакции.

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