我正在尝试访问秒napshot.data()返回的内容,但有一个问题,如下面的评论所述。我试图创建一个异步函数,但无济于事。知道出了什么问题吗?请查看2条评论。
useEffect(() => {
firestore.collection(`comments`).onSnapshot((snapshot) => {
const posts = snapshot.docs
.map((doc) => {
const address = doc.data().comments?.map((comment) => {
comment.get().then((secondSnapshot) => {
console.log("snapshot", secondSnapshot.data());
#I SEE WHAT I EXPECT TO SEE
return secondSnapshot.data();
});
});
console.log(address) #THIS RETURNS UNDEFINED FOR SOME REASON??
return {
username: doc.data().username,
date: doc.data().date.seconds,
text: doc.data().text,
votes: doc.data().votes,
comments: [],
};
});
props.setComments(posts);
});
}, [location]);
除了@Mulan指出的React vs Firebase设计问题外,您的代码还有几个问题。
下面的map函数不返回任何内容。如果你不从这个街区返回一些东西,你将在地址中找不到任何东西。
const address = doc.data().comments?.map((comment) => {
/* This MUST return something */
});
您正在混合同步和异步代码。基本上,您尝试在对注释进行不同的异步调用之前打印地址值。get()已完成运行。
const address = doc.data().comments?.map((comment) => {
/* async code inside */
});
console.log(address); // this runs without waiting for the async code
如果您对旧的Promise语法感到困难,请尝试使用async/wait代替:
firestore.collection(`comments`).onSnapshot(async (snapshot) => {
const postPromises = snapshot.docs
.map(async (doc) => {
const comments = doc.data().comments ?? []; // assign an empty array if there are no comments
const secondSnapshots = await Promise.all(comments.map((comment) => comment.get()));
const addresses = secondSnapshots.map((secondSnapshot) => secondSnapshot.data());
console.log(addresses);
return { /* ... */ };
});
const posts = await Promise.all(postPromises);
props.setComments(posts);
});
我不确定你是否应该打电话给comment。get()在快照中,但这是另一个故事,我不是Firebase专家。
我是Scala期货的新手,我对Scala期货的回报值有疑问。 因此,scala未来的语法通常是 我想知道如何从调用此方法的其他方法访问。 换句话说, 那么应该用什么方法让< code>List[Int]脱离未来呢? 我尝试过使用地图方法,但无法成功做到这一点。
问题内容: 我希望我的控制器在用户没有权限查看特定页面时返回正确的HTTP响应代码。 问题答案: 匆匆 如果您使用的是普通JSP视图(最常见),则只需添加 视图文件中的某处。在顶部是一个不错的地方。 详情 在MVC中,我将始终在视图中进行设置,在大多数情况下,对于Spring- MVC,请使用来呈现正确的视图以响应抛出的运行时Exception。 例如:在控制器或服务层中创建一个并将其抛出,并使异
我如何返回那些在访问Milpitas之后访问Santa Clara或在访问#2之后访问#5的客户的?
问题内容: 需要访问一个从PostgreSQL返回setof refcursor的过程。 我能够访问第一个对象,但不能访问其余对象,而不能访问其余对象。 这给了我第一个refcursor值,但是当我尝试使用第二个refcursor时给了我错误,我使用了这一行: 它给出了错误。还尝试了: 这也行不通。过程示例为: 请帮助我如何访问第二个对象。 问题答案: 表示您在调用时得到一个常规,其中每个“行”包
我希望能够在RestController方法(或endpoint)作为数据流序列化为HttpServletResponse之前修改它返回的POJO。但是我希望能够在控制器方法代码之外(作为中间件)完成。 我曾尝试使用HandlerInterceptor来完成此操作,但我无法访问POJO。我也尝试过使用AOP,但从未调用切入点。 我希望能够在控制器执行自己的逻辑并返回后,向控制器返回的资源添加列表(
我有一个Keycloak(独立)V1.9.4。最后在AWS实例上使用Wildfly 10安装安装程序,并尝试使用Keycloak(通过Keycloak的登录页面)和Twitter4j来验证Twitter用户,然后明显地让我的应用程序验证并查看用户的时间线等。 我已经配置了身份提供程序(Twitter)、领域和我的客户端应用程序。 我还在apps.Twitter.com上设置了一个Twitter应用