Пользователь быстрее, чем облачная функция - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть облачная функция, которая создает профиль пользователя в Firestore, сразу после того, как пользователь зарегистрируется в FirebaseAuth (с E-Mail & Password).

Пользовательский документ может выглядеть следующим образом

users/{<uid>}

{
  username:"smith",
  status: "I love pineapple pizza",
  email:"smith@mail.com"
}

После регистрации я даю своим пользователям возможность изменить их атрибут status. Проблема в том, что пользователь может работать быстрее, чем запущенная функция облака. Это приводит к тому, что пользователь пытается изменить документ, который не существует.

Как я могу убедиться, что облачная функция уже запущена? Единственное, что у меня на уме - это проверка со стороны клиента, существует ли документ (возможно, цикл). Это не очень хороший подход.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Проверка, если документ уже существует, - ваш единственный подход. У вас действительно нет никаких гарантий относительно того, как именно клиент и сервер будут взаимодействовать друг с другом. Если вам нужно выполнить какое-то действие с клиентом, ему придется координировать свои действия с сервером, без каких-либо предположений о том, когда может сработать именно облачная функция.

Если вы хотите, чтобы какой-нибудь клиентский код срабатывал, когда функция создает документ в Firestore, просто установите прослушиватель для этого документа (не используйте get () - вместо него должен быть прослушиватель). Слушатель будет запущен при создании документа, и вы будете уверены, что функция завершена

0 голосов
/ 09 сентября 2018

Вы можете прикрепить слушателя к документу . При этом ваш onSnapshot должен сработать при создании документа, после чего вы можете его обновить.

В зависимости от точной записи, которую необходимо выполнить клиенту и серверу, также рассмотрите возможность создания идемпотентной записи. Итак: убедитесь, что кто бы ни шел первым, все записи будут успешными.

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