英文:
How to cancel firestore calls in web v9?
问题
我有一个React和Firestore应用程序。该应用程序从Firestore获取数据并在表格中显示。数据的获取是在useEffect
中完成的,如下所示。
export default DisplayPage() {
const [records, setRecord] = useState([]);
useEffect(() => {
const getData = async () => {
const docRef = doc(db, 'table_name');
return getDoc(docRef);
}
getData().then(data => setRecord(data.data()))
return () => {
// 在这里实现取消调用?
}
})
// 表格显示部分...
}
它工作得非常好,但我在这里遇到的问题是如何取消Firestore的调用。一旦我访问页面,API调用就会被触发,但即使在调用完成之前返回到其他页面,API调用仍然会继续进行,直到它们完成。我知道fetch有AbortController,Axios也有,但我无法找到Firestore调用的取消方法。我已经看到了对onSnapshot监听的取消方法,但在阅读Firestore普通获取调用的文档时,并没有找到取消调用的选项。
英文:
I have a react, firestore app. The app gets data from firestore and displays it in a table. The fetching of the data is done in a useEffect
as can be seen below.
export default DisplayPage() {
const [records,setRecord] = useState([]);
useEffect(() => {
const getData = async () => {
const docRef = doc(db, 'table_name');
return getDoc(docRef);
}
getData().then(data => setRecord(data.data()))
return () => {
// implement cancel call here?
}
})
// table display here ...
}
It works all fine and good but the problem I have here is how do I cancel the firestore calls. As soon as I visit the page the API calls are called but even if i navigate back to a page before the calls are completed, the API calls keep continuing until they've finished. I know fetch has AbortController and so does Axios but I was unable to find anything for Firestore calls. I have seen it for onSnapshot listens but upon reading the docs for normal firestore get calls there aren't any options for cancelling the call.
答案1
得分: 1
没有办法取消已经开始的get()
调用。我能想到的最好方法是检测组件是否已经超出范围,当发生这种情况时不调用setRecord
。
在快速搜索中,这正是以下答案展示的内容:https://stackoverflow.com/questions/52524368/how-to-stop-firestore-get-query-on-componentwillunmount
还请参考:
- https://stackoverflow.com/questions/50454135/can-i-cancel-a-firestore-write-using-offline-persistence
- https://stackoverflow.com/questions/59979393/how-to-unsubscribe-the-firestore-fetching-data
英文:
There is no way to cancel a get()
call that has already started. The best I can think of is to detect that the component has gone out of scope, and not calling setRecord
when that has already happened.
Upon a quick search, that's precisely what the answer here shows: https://stackoverflow.com/questions/52524368/how-to-stop-firestore-get-query-on-componentwillunmount
Also see:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论