Актуализация данных базы данных с помощью функции Cloud - PullRequest
0 голосов
/ 18 февраля 2020

Я занимаюсь разработкой приложения Android, и у меня есть проблема, которую я не могу решить, несмотря на то, что читаю учебники по Ine rnet ...

В моем приложении у пользователя есть панель жизни (100 очков) и мне бы хотелось, чтобы каждые 60 секунд (например) полоса жизни уменьшалась на определенное значение (даже когда пользователь вышел из системы). Данные зарегистрированы в базе данных Firebase:

{
    "actualize": {
        "state" : true,
        "time" : 60000
            },
    "users": {
        "-M-gSECRUGQMUrBbJ8wF": {
            "healthBar": 100,
            "substractionPoint" : 1
            },
        "-M-gSEijB-lClfuKkMUh": {
            "healthBar": 75,
            "substractionPoint" : 1.5
            }
        }
}

Поэтому я хочу использовать часть Firebase Cloud Functions, но я не могу создать код TypeScript, который мне подходит. Вот схема, которую я хотел бы:

//Data recovery from the database
actualiseState -> boolean
actualizeTime -> number

<idUser>/healthBar -> number
<idUser>/substractionPoint -> number

//A trigger ?
do {
<idUser>/healthBar = (<idUser>/healthBar) - <idUser>/substractionPoint

update value in database

sleep(actualizeTime)
}

while (state = true)

Заранее благодарю за помощь;) / Перевод Google Translate

1 Ответ

0 голосов
/ 21 февраля 2020

Я создал этот код, но он не соответствует моим ожиданиям:

import * as functions from 'firebase-functions';

let actualiseState: boolean
let actualizeTime: number

export const vvalueActualize = functions.database
.ref('/actualize')
.onUpdate(async(change, context) => {

let afterData = change.after.val()

actualiseState = afterData.state
actualizeTime = afterData.time
})


export const onMessageUpdate = functions.database
.ref('/users/{userId}')
.onUpdate(async(change, context) => {

    if (actualiseState){

        await sleep(actualizeTime)

const afterData = change.after.val()

const healtBar = afterData.healtBar
const substractionPoint = afterData.substractionPoint

const newValueData = healtBar - substractionPoint

if (newValueData <= 0){
    return change.after.ref.update({valeur: 0})
}
else {
    return change.after.ref.update({valeur: newValueData})
}

}

})


function sleep(ms: number) {
    return new Promise(resolve => setTimeout(resolve, ms));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...