我正在尝试使用feed在本机上创建应用程序。在主屏幕上,我获取数据:
class Guess {
public static void main (String[] args) throws java.io.IOException {
char answer = 'K', ignore, ch = 'a';
int i=0;
while (ch != 'K') {
System.out.println("I am Thinking of a letter between A and Z, can you guess it?");
ch = (char) System.in.read();
if (ch !='K')
System.out.println("Wrong ! please try again");
i++;
}
System.out.println("Correct!, you guessed after "+i+" attempts");
}
}
例如,当我想对帖子发表评论时,我首先使用不同的查询将数据推送到firebase中,例如:
fetchData() {
firebase.database().ref(`/posts/${group}`).on('value', async snapshot => {...}
}
但是我意识到我的第一个函数fetchData被调用了3次。 然后将查询分组为:
export const likeComment = (...) => {
firebase.database().ref(`/posts/${group}/${post}`).update
({
updatedAt: firebase.database.ServerValue.TIMESTAMP
});
firebase.database().ref(`/posts/${group}/${post}/lastComments`).set(...);
然后,fetchData被调用了两次。
我想知道这是否是最好的方法,为什么我的函数fetchData仍然被调用两次。 谢谢您的帮助
答案 0 :(得分:0)
很难从有限的代码中看出来,但我的猜测是fetchData
实际上并没有被多次调用,而是在您更新Firebase数据库时触发snapshot
。
代码中您说.on('value', async snapshot =>
的那部分是您要设置一个侦听器,以便在值更改时向您发送更新。
所以我的猜测是您的三个调用是:
.on( snapshot
监听器在您打电话时触发
update
.on( snapshot
监听器在您再次触发时
致电set
基于推送的数据库工作流程是Firebase的主要优势之一。如果您只想一次获取数据而不希望实时更新,则可以调用.once(
而不是.on(
https://firebase.google.com/docs/database/web/read-and-write