Javascript 中止正在进行的Firebase数据库请求

Javascript 中止正在进行的Firebase数据库请求,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想知道当Firebase实时数据库请求尚未返回任何结果时,是否有任何方法可以取消/中止该请求 考虑以下几点: 1) 用户从列表中选择一项 2) (Web)应用程序请求检索该项目的某些消息或其他数据 3) 用户返回并选择一个不同的项目 4) Firebase请求返回错误项的结果 可以中止常规xhr请求。可以清除超时(设置超时)。是否有任何方法中止/取消正在进行的firebase请求 例如: var request; // .. if (request) { abort(request); re

我想知道当Firebase实时数据库请求尚未返回任何结果时,是否有任何方法可以取消/中止该请求

考虑以下几点:

1) 用户从列表中选择一项 2) (Web)应用程序请求检索该项目的某些消息或其他数据 3) 用户返回并选择一个不同的项目 4) Firebase请求返回错误项的结果

可以中止常规xhr请求。可以清除超时(设置超时)。是否有任何方法中止/取消正在进行的firebase请求

例如:

var request;
// ..

if (request) { abort(request); request = null; }
request = firebase.database().ref("item1/").once("value", callback);
firebase.db.ref("/item1").once("value", function(snap) { console.log("1: ", snap.val()); });
firebase.db.ref("/item1").off();
firebase.db.ref("/item2").once("value", function(snap) { console.log("2: ", snap.val()); });

PS:这个问题是关于数据库的,但我想这对于大多数firebase服务来说是非常方便的?

没有办法中止读取操作

如果您不想让应用程序再使用数据,可以通过调用
off()
来分离侦听器

这不仅适用于使用.on()注册的侦听器,还适用于.once()

例如:

var request;
// ..

if (request) { abort(request); request = null; }
request = firebase.database().ref("item1/").once("value", callback);
firebase.db.ref("/item1").once("value", function(snap) { console.log("1: ", snap.val()); });
firebase.db.ref("/item1").off();
firebase.db.ref("/item2").once("value", function(snap) { console.log("2: ", snap.val()); });
在控制台中打印以下内容:

2:{…}


换句话说:第一行的回调永远不会被调用(除非它在调用.off()之前返回一个结果)

但是在这种情况下我没有侦听器。我用“一次”。我可以先执行ref(“item1/”).once(),然后执行ref(“item1/”).off,然后执行ref(“item2/”).once()吗?那永远不会触发item1的回调吗?试试看,让我知道。哇。这似乎奏效了!因此,我可以使用ref,而不是存储一个“id”并中止它。我将在稍后为这个问题添加一个答案。谢谢我真的不知道你为什么要在我告诉你的内容中添加第二个答案。如果你想让答案包含一个样本,建议编辑。很好。刚刚这么做了,我将删除我自己的答案:)再次感谢!