如何解决Firestore应用程序使请求保持打开状态
我不确定到底发生了什么。我有一个连接到Firebase数据库的Angular应用程序。一切正常,它可以毫无问题地获取一些数据。但是,当我在devtools的“网络”选项卡中将网络限制为“脱机”时,我突然看到失败的网络请求反复弹出,即使在切换到“脱机”之前没有待处理或失败的请求。
经过仔细检查,我发现这些请求的请求URL以https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?[...]
开头,其中单词“ Listen”很明显。我想知道这是否是某种Websocket /轮询的事情吗?
在此页面上获取数据的请求由以下代码完成:
this.db.collection(this.observationsPath).valueChanges();
;
其中this.db
是从AngularFirestore
导入的'@angular/fire/firestore'
的实例。
或者我尝试了this.db.collection(this.observationsPath).snapshotChanges();
为什么会发生这种情况,如何停止呢?这些文档并没有真正的帮助,它们令人难以置信,并且对此类事情毫无用处。
解决方法
您共享的两个侦听器:
this.db.collection(this.observationsPath).valueChanges();;
this.db.collection(this.observationsPath).snapshotChanges();
这两个方法都将侦听器附加到Firestore,该侦听器最初会读取一次数据,然后继续观察数据的更改。后者是导致对https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?[...]
的“挂起”调用的原因,这是一种“长期轮询”请求,需要通知此类更改。
要不附加侦听器,您需要使用use get()
,后者仅获取一次文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。