Firebase JS API: как избежать выполнения `off ()` перед тем, как `on ()` вызывается / завершается? - PullRequest
0 голосов
/ 24 марта 2019

В следующем коде off() выполняется до on(). Это происходит потому, что

DataSnapshot, переданный обратному вызову, будет для местоположения, в котором был вызван on (). Не сработает, пока все содержимое не будет синхронизировано.

как указано в документах: https://firebase.google.com/docs/reference/js/firebase.database.Reference#on

quotesRef.orderByChild('index').on('value', function(snapshot) {
    snapshot.forEach(function(childSnapShot) {
        vm.allQuotes.push({
            key: childSnapShot.key,
            quoteTxt: childSnapShot.val().quote
        })
    })
})

quotesRef.off('value')

Как структурировать приведенный выше код так, чтобы off() вызывался только тогда, когда контент полностью синхронизирован или когда действительно был вызван on.

Спасибо

1 Ответ

1 голос
/ 24 марта 2019

Чтобы вызвать off после того, как данные были прочитаны из базы данных, переместите их в обратный вызов:

quotesRef.orderByChild('index').on('value', function(snapshot) {
    snapshot.forEach(function(childSnapShot) {
        vm.allQuotes.push({
            key: childSnapShot.key,
            quoteTxt: childSnapShot.val().quote
        })
    })
    quotesRef.off('value')
})

Но, как прокомментировал Андре, это точный эквивалент использования once():

quotesRef.orderByChild('index').once('value', function(snapshot) {
    snapshot.forEach(function(childSnapShot) {
        vm.allQuotes.push({
            key: childSnapShot.key,
            quoteTxt: childSnapShot.val().quote
        })
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...