问题描述
react,redux,es6,firestore onsnapshot 查询
我想根据博客何时更改更新一组问题,当类别更改时,博客本身也会更改。
但是,当我尝试将 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
})
})
解决方法
我已经开始工作了, 现在我很确定这是服务器上数据条目中的空格拼写错误。
抱歉,如果有人看过并试图提供帮助, 谢谢你!