如何在Firebase中手动取消一次()?

时间:2017-10-19 11:28:23

标签: javascript firebase firebase-realtime-database

假设我有这个架构:

{
  "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回调。

1 个答案:

答案 0 :(得分:2)

once调用将始终解决,因为JavaScript没有提供取消正在进行的异步操作的方法。如果“取消”发生在其他地方,您会希望立即从once回调返回,而不是采取任何行动。

您可以通过以下方式发出信号,例如,当您取消时将canceled变量设置为true,并在回调中执行以下操作:

if (canceled) return;