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