Firestore承诺链接第二个链在快照上找不到文档



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
})                         
})

我让它工作了,现在我很确定这是服务器上的数据输入中的一个空格错别字。

如果有人看到并试图帮助你,我很抱歉给你带来的麻烦。谢谢你!

最新更新