Трудные времена с транзакциями базы данных в реальном времени в облачных функциях - PullRequest
0 голосов
/ 25 февраля 2019

Вот что я хочу сделать:

-Имеет счетчик.

-Счетчик может быть увеличен или уменьшен на любое значение.

-Счетчик не может бытьотрицательный.

Я пытаюсь достичь этого, используя конечную точку https с облачными функциями firebase.

Что я получаю:

При попытке увеличить егоработает нормально, но при попытке уменьшить, он продолжает говорить: «Значение счетчика не может быть отрицательным».это ответ, который я посылаю в случае, если значение, которое нужно установить, является отрицательным.

Но он возвращает тот же ответ, даже если значение не должно быть отрицательным.

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

Вот мой код:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp();

export const ChangeCount = functions.https.onRequest(async (request, response) => 
{
    const countID = request.body.CountID;
    const amount = request.body.Amount;

    console.log('Count ID:' + countID);
    console.log('Amount: ' + amount);

    if(countID === null)
    {
        response.status(500).send('ID cannot be empty or null.');
    }

    if(amount === null)
    {
        response.status(500).send('Amount cannot be null.');
    }

    if(amount === 0)
    {
        response.status(500).send('Amount cannot be 0.')
    }

    const amountNumber = Number(amount);

    if(Number.isNaN(amountNumber))
    {
        response.status(500).send('Amount is NaN.')
    }

    await admin.database().ref('Counts/' + countID).transaction(current =>
    {
        const currentNumber = Number(current.Count);

        console.log('Current Count:' + currentNumber);
        console.log('Current + Amount = ' + currentNumber + amountNumber);

        if(Number.isNaN(currentNumber) || currentNumber == 0)
        {
            if(amountNumber >= 0)
                return amountNumber;
            else
                return;
        }
        else
        {
            if(currentNumber + amountNumber >= 0)
                return currentNumber + amountNumber;
            else
                return;
        }
    }).then(result =>
    {
        if(result.committed)
            response.send(result.snapshot)
        else
            response.status(500).send('Count value cannot be negative.');
    })
    .catch(error =>
    {
        response.status(500).send(error);
    }); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...