java - 在 Firebase Admin SDK 之上创建 REST API 控制器
问题描述
我正在尝试在Firebase admin sdk之上构建 REST API 控制器(使用 spring boot 框架),但我面临以下问题:
假设,如果我收到一个GET请求,它需要从Firebase 实时数据库中读取数据并作为该GET请求的响应返回。只能使用异步侦听器从Firebase 实时数据库读取数据,所以我该如何实现:
- 我是否需要等到异步调用完成才能对该GET请求做出响应?(如果是,任何示例)
- 或任何其他最佳实践在这里遵循?
解决方案
类似这样的东西应该可以工作:
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<Object> value = new AtomicReference<>(null);
final AtomicReference<Exception> exception = new AtomicReference<>(null);
ref.getReference().addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
value.set(snapshot.getValue());
latch.countDown();
}
@Override
public void onCancelled(DatabaseError error) {
exception.set(error.toException());
latch.countDown();
}
});
latch.await(30, TimeUnit.SECONDS);
if (exception.get() != null) {
// handle error
}
Object result = value.get();
// return result to user
我建议将所有同步逻辑(使用锁存器和原子引用)移动到一个新的可重用类中,这样代码就变得简单且更具可读性。
推荐阅读
- kubernetes - Spring-Kafka消费者协调器不可用或持续循环无效
- python - 如果在硒中找不到元素,如何删除元素
- mysql - ubuntu中postgres转储到mysql转储的转换
- java - 点燃连续查询:无法初始化远程过滤器
- javascript - CKEditor 自动添加
在我的内容中添加标签
- unix - 复制和粘贴 Unix 文件的内容
- jmeter - 具有开放身份验证的 Jmeter
- c++ - 如何改进一堆 else-if 条件来评估已知值范围内的变量?
- wix - 更新 WIX 3.11 安装程序中的单个功能,同时保持其他功能不变
- r - 如何缩短每个包含条件中“不包含多个字符串”的表达。正则表达式 R