Получить текущее состояние в транзакции операции в Firebase - PullRequest
0 голосов
/ 12 января 2019

Я создал скрипт, который выполняет запрос с помощью firebase. Поскольку я хочу избежать нескольких запросов в отношении отношения одновременно, я использую функцию транзакции, как показано в коде. Сначала я получаю текущее состояние отношения и проверяю, присутствует оно или нет. Это похоже на работу. Первый раз - const current = null, и будет выполнена функция добавления значения к data2.

И если я запускаю скрипт второй раз, то он успешно переходит в следующую функцию (doSecondFunction()) И, к сожалению, здесь нет никаких текущих данных Я ожидаю, что значение ref data2 было добавлено в первый раз. Но в результате я получаю null.

Есть ли способ работать в транзакции с текущим состоянием базы данных?

const ref = firebase.database().ref('data2');
    ref.once('value', function(snapshot) {
        const current = snapshot.val();

                if(current == null){
                    console.log('FIRST');
                    addValToRefFunction();
                }else{
                    console.log('SECOND');
                    doSecondFunction(current, ref);
                }
            });

function doSecondFunction(current, ref){
                ref.transaction(function(currentData){
                    console.log(current); // result is the right value  
                    console.log(currentData); // result is null ?
                    if (currentData === current){
                        console.log('Check');
                        return;
            }         
}

1 Ответ

0 голосов
/ 12 января 2019

Нет способа контролировать то, что клиент видит как текущее состояние узла при запуске транзакции. По моему опыту, когда в первый раз вызывается обратный вызов, это значение почти всегда равно null, и обратный вызов должен это обрабатывать.

Также см. Мой ответ здесь для описания процесса: Firebase runTransaction не работает - MutableData имеет значение null

...