Java 如何同时完成Firebase存储任务和Firestore任务?

Java 如何同时完成Firebase存储任务和Firestore任务?,java,android,firebase,google-cloud-firestore,firebase-storage,Java,Android,Firebase,Google Cloud Firestore,Firebase Storage,我正在使用: ref.putFile(file).addOnSuccessListener(taskSnapshot -> { ref.getDownloadUrl().addOnSuccessListener(uri -> { String downloadUrl = uri.toString(); Map<String, Object> map = new HashMap<>(); map.put(

我正在使用:

ref.putFile(file).addOnSuccessListener(taskSnapshot -> {
    ref.getDownloadUrl().addOnSuccessListener(uri -> {
        String downloadUrl = uri.toString();

        Map<String, Object> map = new HashMap<>();
        map.put("profilePic", downloadUrl);
        uidDocRef.update(map);
    });
});
ref.putFile(file).addOnSuccessListener(taskSnapshot->{
参考getDownloadUrl().addOnSuccessListener(uri->{
String downloadUrl=uri.toString();
Map Map=newhashmap();
map.put(“profilePic”,下载URL);
uidDocRef.更新(地图);
});
});
将图像上载到Firebase存储。成功添加后,我使用
downloadUrl
更新用户配置文件


问题是当我尝试写入Firestore时出错。已添加图像,但未添加相应的url。我想做一些类似同步更新的事情,这是原子的:要么所有更新成功,要么所有更新失败。如何做到这一点?

这些操作跨越不同的服务,甚至可能是不同的可用性区域。没有办法使它们原子化

虽然你可以通过采纳阿里的建议并从客户那里退回来降低风险,但是没有办法使这些操作原子化。但在某个时刻,会出现客户端无法回滚的故障

对于不可避免的失败,最常见的方法是使代码在以后的操作失败时仍然健壮,并偶尔进行清理

另见:

  • ,它涵盖了Firebase身份验证和实时数据库的类似场景

如果在
FireStore
上发生错误,您可以从
FirebaseStorage
@AliAhmed中删除该图像。是的,我考虑过这一点,但为什么要对单个故障执行写入和删除操作?有没有一种方法可以同时做到,要么全部成功,要么全部失败?我不知道。我确实喜欢这个。我们必须先将图像上传到存储器以获取其URL,然后启动FireStore或FirebaseDatabase部分。所以,如果数据库产生任何问题,我们应该删除它image@AliAhmed谢谢阿里,但我想找到一个解决方案,如上所述,无需上传图像,可以在以后因为失败而删除。谢谢你的回复。您认为
任务。当完成(firebaseStorageTask,firestoreTask)
时,在这种情况下有什么意义吗?因为将URL写入Firestore需要获取URL,这需要上传文件,它们实际上是一系列任务,而不是并行任务。所以我会使用
continueWith
来实现这一点。这就是我想要的。非常感谢你,弗兰克!!