假设我有这个架构:
{
"movies": {
"movie-id-1": {
"title": "Rambo no. 5",
"description": "",
"genre": "genre-id-1"
}
},
"genres": {
"genre-id-1": {
"name": "Action",
"description": ""
}
}
}
我需要在child_added
上启动/movies
监听器:
const onMovieChildAdded = ref.child('movies').on('child_added', (movieSnap) => {
const movie = movieSnap.val()
ref.child(`genres/${movie.genre}`).once('value').then((genreSnap) => {
const genre = genreSnap.val()
console.log(movie.title, genre.name)
})
})
在上面的代码中,如果将新电影添加到列表中,我还会执行另一个检索其类型的查询。问题是,如果我关闭child_added
听众:
ref.child('movies').off('child_added', onMovieChildAdded)
如何取消里面的once('value')
?
因为有时即使在关闭once('value')
后仍会调用child_added
回调。
答案 0 :(得分:2)
once
调用将始终解决,因为JavaScript没有提供取消正在进行的异步操作的方法。如果“取消”发生在其他地方,您会希望立即从once
回调返回,而不是采取任何行动。
您可以通过以下方式发出信号,例如,当您取消时将canceled
变量设置为true
,并在回调中执行以下操作:
if (canceled) return;