在以下代码中,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

谢谢

最佳答案

要从数据库读取数据后调用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')
})


但是正如André所说,这与使用once()完全等效:

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

10-07 18:12