gpt4 book ai didi

javascript - Firestore 长获取请求

转载 作者:行者123 更新时间:2023-12-03 00:41:12 25 4
gpt4 key购买 nike

我正在使用 Firebase 和 ReactJS 创建一个使用 Firestore 的网站。当我使用以下 Javascript 代码从 Firestore 读取时,它是成功的,但是,刷新页面后一分钟多会发生一个额外的 GET 请求。

firestore
.collection("users")
.doc(uid)
.get()
.then(doc => {
if (!doc.exists) {
console.error("User " + uid + " does not exist. Cannot retrieve document");
} else {
const { avatar, displayName } = doc.data();
this.setState({ avatar: avatar, displayName: displayName });
}
})
.catch(err => {
console.error("Error getting document", err);
});

Firefox screenshot

如果我在最终 GET 之前刷新页面,我会在控制台中收到警告“跨源请求被阻止”。我从 Firestore 获取数据仍然没有问题。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://firestore.googleapis.com/google.firestore.v1beta1.Firestore/Listen/channel?database=projects%2Fsword-pear%2Fdatabases%2F(default)&gsessionid=QbGcouT4k6BUq5C33CSi25Ih6UQR6QI2&VER=8&RID=rpc&SID=wLKF3u5yBNBdMKhPjNHJwQ&CI=0&AID=6&TYPE=xmlhttp&zx=7mjvphigpy5i&t=2. (Reason: CORS request did not succeed)

我假设服务器在刷新之前仍尝试将数据发送到原始网页,但如果我在第一毫秒内获取数据,我不知道为什么 GET 花费了这么长时间。

最佳答案

这听起来基本上是预料之中的。 Firestore 针对与后端的实时通信进行了优化,并通过使用涉及长期 GET 请求的长轮询形式来实现此目的。因此,即使您只调用 get(),SDK 也会在内部启动到后端的长轮询连接,以防您执行后续的 get()onSnapshot() 调用。我相信,如果您在约 1 分钟内不再执行任何请求,那么连接将被清理,除非您执行其他操作,否则您将不会看到任何更多 GET 请求。

我无法确切解释为什么浏览器在页面重新加载时记录“跨源请求被阻止”消息,但这应该是良性的并且可以忽略。

关于javascript - Firestore 长获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53454227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com