Dre*_*ale 1 java android firebase google-cloud-functions
所以我在用户页面上,我想让用户在服务器端创建一个帖子但是扇出.
exports.fanoutUpdatePost = functions.database.ref('/post/{postKey}').onWrite(event => {
var post = event.data.val();
var fanoutObject = {};
fanoutObject['/user-post/'+post.userKey+'/post/'+event.params.postKey] = post;
fanoutObject['/blog-post/'+post.blogKey+'/post/'+event.params.postKey] = post;
return event.data.adminRef.root.update(fanoutObject);
});
Run Code Online (Sandbox Code Playgroud)
我这样做,所以你可以发布,/post/服务器将自动扇出.问题是我希望客户端显示进度条,直到它被保存为止/user-post/.
但是我的客户端回调在创建帖子后立即触发/post/.
public void addPost(final PostDao post, ProgressBar progressBar) {
progressBar.setVisibility(View.VISIBLE);
String key = mDatabase.child(“post”).push().getKey();
Map<String, Object> postUpdateMap = new HashMap<>();
postUpdateMap.put(“/post/” +key, post.toMap());
mDatabase.updateChildren(postUpdateMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if(databaseError == null){
Log.e(TAG, databaseError);
}else{
// @@@@@ This executes before server side
// @@@@@ cloud function fanoutUpdatePost
// @@@@@ finishes. Can I make this happen
// @@@@@ after it?
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
有没有办法等到我的onWrite云功能完成?
数据库写入不可能等待某些云功能的完成.写入对云函数一无所知 - 写入只是成为函数稍后消耗的事件.
如果您需要等待Cloud Function的完成,那么如果您将其作为HTTPS触发器编写并直接从客户端调用它,只有在完成后才会发回响应,这将会容易得多.将数据发送到请求中的post,并让函数负责执行所有实际的数据库写入.