我可以在回调本身中结束Firebase回调吗?

时间:2019-05-14 14:55:18

标签: typescript firebase firebase-realtime-database

我想知道是否有任何方法可以停止回调本身内部的回调。我已经尝试过使用ref.off()方法将其停止,如下所示,但它仍将继续运行。有什么建议吗?

ref.orderByChild('t').startAt(time.getTime()).on('child_added', function (snapshot) {
  const d = snapshot.val();
  const x = Math.round(d.x * 100).toString();
  const y = Math.round(d.y * 100).toString();
  if (that.selectedEnd && d.t > that.selectedEnd.getTime()) {
    snapshot.ref.off('child_added');
    console.log('STOP');
  } else {
    ....
  }
});

1 个答案:

答案 0 :(得分:0)

根据on()的API文档:

  

返回功能

     

所提供的回调函数未经修改就返回。这只是   为了方便起见,如果您要将内联函数传递给on(),但是   存储回调函数,以便以后传递给off()。

因此,您可以将其返回值传递给off(),在您调用on()的同一查询对象上调用:

const query = ref.orderByChild('t').startAt(time.getTime());
const listener = query.on('child_added', function (snapshot) {
    ...
    query.off('child_added', listener);
});