Как установить значение узла в базе данных Firebase с помощью облачных функций Firebase, если пользователь не выполняет запись в течение длительного периода? - PullRequest
2 голосов
/ 08 января 2020

У меня есть узел в базе данных Firebase Realtime, который сохраняет логическое значение true или false вместе с некоторыми другими атрибутами. Если и только если этот ключ имеет значение false, тогда я разрешаю пользователю выполнять операции записи на том же узле в базе данных.

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

Это работает, как я планировал, но проблема, с которой я сталкиваюсь, заключается в том, что пользователь изменил это значение на правда, но из-за плохой сети или чего-то другого он не пишет в базу данных. Теперь никто не может писать на этом узле в базе данных.

Я хотел бы добавить функцию временного интервала, если пользователь не выполнял никаких операций записи в течение некоторого интервала, скажем, 10 минут, и логическое значение истинно. Затем я хотел бы установить значение false.

Я знаю, что облачная функция Firebase запускается только при операциях записи, обновления и создания базы данных. Пожалуйста, предложите мне что-нибудь для решения этой проблемы или какие-то другие способы, которыми я могу это сделать. Нет ни одного фрагмента кода, касающегося этой функции. Я искал различные ресурсы на inte rnet, мозговой штурм сам, я ничего не мог получить.

1 Ответ

0 голосов
/ 08 января 2020

Возможно, это не идеальное решение, но это обходной путь. В том месте, где вы разрешаете запись данных, возможно, через условную проверку; Вы можете просто добавить другое условие, используя оператор ИЛИ. Просто разрешите запись данных, когда (это логическое значение - false) или (логическое значение - true, но отметка времени последнего обновления узла превышает текущую отметку времени на ваше время интервала). Это должно мне что-то вроде этого: if(!dataSnapshot.getBoolean || (dataSnapshot.getBoolean && currentTimestamp - dataSnapshot.getTimestamp >= YOUR_TIME_INTERVAL)){ //Your Logic Here }

...