在Firestore文档(https://firebase.google.com/docs/firestore/query-data/listen)中,
您可以使用onSnapshot()方法收听文档。首字母缩写 使用您提供的回调进行调用可创建文档快照 立即使用单个文档的当前内容。然后, 每次内容更改时,另一个调用都会更新文档 快照。
但是,我只希望数据更改时触发我的监听器。我不希望它在应用加载时触发,以获取数据的初始状态。
我搜索了互联网,发现了一个提示。(Can Cloud Firestore onSnapshot() only trigger on changes, and not get the initial state?)
如果您只想接收某些数据,则可能需要弄清楚 如何进行查询,例如,通过添加时间戳字段和 让客户仅查询自 一些以前的时间。
这意味着.where('createdDate', '>=', new Date())
吗?
我把它放在我的代码中。例如,
firebase
.firestore()
.collection('script')
.where('createdDate', '>=', new Date())
.orderBy('createdDate', 'desc')
.limit(1)
.onSnapshot(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
console.log(doc.data().text);
const textarea = document.createElement('textarea');
textarea.value = doc.data().text;
textarea.rows = '5';
textarea.cols = '40';
textarea.id = 'textarea';
const parent = document.getElementById('textbox');
parent.appendChild(textarea);
const upload = document.createElement('BUTTON');
upload.innerHTML = 'スピーチを提出'
upload.addEventListener("click", function(event){
const resultText = document.getElementById('textarea');
firebase.firestore().collection('final').add({
text: resultText.value
}).catch(function(error){
console.error('Error writing', error);
});
});
parent.appendChild(upload);
});
});
但是没有用。 你能给我什么建议吗?
答案 0 :(得分:1)
由于@gso_gabriel的评论,我可以解决我的问题。
var initState = true;
firebase
.firestore()
.collection('script')
.orderBy('createdDate', 'desc')
.limit(1)
.onSnapshot(function (querySnapshot) {
console.log(`Received doc snapshot`);
if (initState) {
initState = false;
} else {
if (!querySnapshot.docChanges().empty) {
querySnapshot.forEach(function (doc) {
console.log(doc.data().text);
const textarea = document.createElement('textarea');
textarea.value = doc.data().text;
textarea.rows = '5';
textarea.cols = '40';
textarea.id = 'textarea';
const parent = document.getElementById('textbox');
parent.appendChild(textarea);
const upload = document.createElement('BUTTON');
upload.innerHTML = 'スピーチを提出'
upload.addEventListener("click", function(event){
const resultText = document.getElementById('textarea');
firebase.firestore().collection('final').add({
text: resultText.value
}).catch(function(error){
console.error('Error writing', error);
});
});
parent.appendChild(upload);
});
}
}
}, err => {
console.log(`Encountered error: ${err}`);
});