【发布时间】:2020-09-01 07:50:07
【问题描述】:
我正在使用 GatsbyJS 和 Firebase 制作一个小型博客。我的博客是静态的,就像通常的 gatsby 博客一样,但我在 firebase 上获取评论数据。
这是我获取评论数据的功能
//@@@ Fetch Comment Data function
//function to fetch comment data
const fetchData = async () => {
try {
console.log("entered try")
const commentRef = await db.collection("comments").doc(postID).get();
setComments(commentRef.data().comments);
} catch (error) {
console.error(error);
}
}
问题是,我试图写一个帖子何时没有 cmets 的异常,也就是说文档 postID 不存在,而我的 try catch 从未进入 catch 块,似乎它的永远卡住了。我在这里想知道这是否是我的 async await 语法、我的函数语法或我正在打破的 Firestore 特定规则的错误。
如果文档存在,就好像我已经通过 firebase 面板创建了文档一样,这段代码可以正常工作,没有任何问题。所以我想加入 catch 语句,如果这个 postID 的文档不存在,我可以创建它或者至少 setState 来显示这个 postID 没有 cmets
谢谢
【问题讨论】:
-
是否调用了
setComments方法?尝试在await方法之后写console.log('foo')。 -
setCommments只是一个 useState 钩子方法,比如这个const [comments, setComments] = useState([]);我只是在等待之后做了控制台(“foo”),它实际上显示了所以我继续登录,我登录了commentRef 及其从 firebase 实际返回的内容,即使文档不存在,它也会返回一个空对象。所以这可能是问题所在。也许我应该在 try 块中编写一个 if 语句来检查 commentRef.data() 是否是一个空对象,我应该自己创建文档。但我不太确定。
标签: javascript firebase async-await try-catch