Вот что я хочу сделать:
-Имеет счетчик.
-Счетчик может быть увеличен или уменьшен на любое значение.
-Счетчик не может бытьотрицательный.
Я пытаюсь достичь этого, используя конечную точку 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);
});
});