在下面的代码中,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')
如何构建上述代码,以便仅在内容完全同步或实际调用on
时调用off()
。
谢谢
要在从数据库中读取数据后调用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
})
})
})