react,redux,es6, firestore onsnapshot查询
我想更新一组基于博客何时变化的问题,这些问题本身会随着类别的变化而变化。
我已经成功地设置了firestore查询。
然而,当我试图链接onSnapshot与承诺,第二次onSnapshot失败。我将调用第二个onsnapshot和更新作为第二个链,并承诺所有。
我不清楚的是为什么Firestore没有在第二个onSnapshot中找到文档。
增量方法基于firebase增量方法:
firebase.firestore.FieldValue.increment()
欢迎每一个帮助,提前感谢
我代码:
redux工具箱中的所有内容:
export const getMainBlog = category => dispatch => {
...
}
设置firestore以后使用的路径:
const blogInCategoryCounter = firebase.db.collection(`categories/${category}/local-blogs`);
const getBlog = blogInCategoryCounter.orderBy("counterShownAllUsers","desc").limit(1)
const blogQuestionIndex =
firebase.db.collection("categories").doc(category).collection("blog-question-index");
链中函数返回的第一个承诺:
const getDoc = () => {
let promise = new Promise((resolve,reject) => {
getBlog.onSnapshot(snapshot => {
const data = snapshot.docs.map(doc => {
if (doc.exists){
return ({
id: doc.id,
...doc.data()
})
}else{
console.log("blog not found");
return null;
}
})
const [dataExtracted] = data
resolve(dataExtracted)
})
})
return promise;
}
第二个承诺链,包括一个更新方法和另一个onSnapshot:
const updateCounterBlog = data => {
let promise = new Promise((resolve,reject) => {
const returnedFromUpdate = blogInCategoryCounter.doc(data.id).update({
counterShownAllUsers: firebase.increment(1)
})
returnedFromUpdate.then(() => resolve(data))
})
return promise
}
const extractQuestionIndexQuestions = data => {
let promise = new Promise((resolve,reject) => {
blogQuestionIndex.doc(data.id).onSnapshot(doc => {
if (doc.exists){
resolve(doc.data())
}else{
reject("index doc not found")
}
})
})
return promise;
}
承诺数组:
const promiseArray = [extractQuestionIndexQuestions,updateCounterBlog]
调用:
getDoc().then(data => {
Promise.all(promiseArray.map(callback => callback(data))).then(values => {
const blog = {
blogData: data,
blogId: data.id,
category: category,
blogQuestionIndex: values[0]
}
dispatch(loadBlog(blog)) // for redux thunk
})
})
我让它工作了,现在我很确定这是服务器上的数据输入中的一个空格错别字。
如果有人看到并试图帮助你,我很抱歉给你带来的麻烦。谢谢你!