微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Firestore 承诺链接第二个链快照无法找到文档

如何解决Firestore 承诺链接第二个链快照无法找到文档

react,redux,es6,firestore onsnapshot 查询

我想根据博客何时更改更新一组问题,当类别更改时,博客本身也会更改。

我已设法使用 Firestore 查询设置博客

但是,当我尝试将 onSnapshot 与 promise 链接起来时,第二个 onSnapshot 失败了。 我将第二个 onsnapshot 和 update 作为第二个链与 promise all 一起调用

我不清楚为什么 Firestore 在第二个 onSnapshot 中找不到该文档。

Increment 方法基于 firebase increment 方法

firebase.firestore.FieldValue.increment()

欢迎任何帮助,提前致谢

我的代码

都在 redux 工具包 thunk 操作中:

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

解决方法

我已经开始工作了, 现在我很确定这是服务器上数据条目中的空格拼写错误。

抱歉,如果有人看过并试图提供帮助, 谢谢你!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。