在Firebase云功能onWrite完成后,如何让Android客户端回调触发?

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云功能完成?

Dou*_*son 5

数据库写入不可能等待某些云功能的完成.写入对云函数一无所知 - 写入只是成为函数稍后消耗的事件.

如果您需要等待Cloud Function的完成,那么如果您将其作为HTTPS触发器编写并直接从客户端调用它,只有在完成后才会发回响应,这将会容易得多.将数据发送到请求中的post,并让函数负责执行所有实际的数据库写入.