从另一个内部调用Android Firebase数据库:首先检索哪些数据

时间:2017-01-11 14:49:29

标签: android firebase firebase-realtime-database

// First call
FirebaseDatabase.getInstance().getReference("users/randomUserId")
    .addValueEventListener() { ... };

// Second call
FirebaseDatabase.getInstance().getReference("node/randomNodeId")
    .addValueEventListener() { ... };

我知道上面的代码将按顺序调用:首先完成,然后是第二个。但是,如果我在第一次调用的事件中添加第三个调用,如下所示:

// First call
FirebaseDatabase.getInstance().getReference("users/randomUserId")
    .addValueEventListener() {
        ...
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Third call
            FirebaseDatabase.getInstance().getReference("anotherNode/anotherRandomNodeId")
                .addValueEventListener() { ... };
        }
        ...
    };

// Second call
FirebaseDatabase.getInstance().getReference("node/randomNodeId")
    .addValueEventListener() { ... };

如果是这样的话,订单是什么?是first -> second -> third,因为第二次调用将比第三次调用更早。或者它是first -> third -> second,因为第二个呼叫等待第一个呼叫完成(并且第一个呼叫需要第三个呼叫完成,因此它认为自己已完成)。或者喜欢什么?

addValueEventListeneraddChildEventListener有不同的优先级吗?

注意:我使用此逻辑来确定我的呼叫是否完全完成(第一次)。如果有更好的方法,欢迎您的回答。但我仍然需要知道这一点。 (和你一样,我讨厌不知道我做了什么)

1 个答案:

答案 0 :(得分:1)

您最后一段摘录的最有可能的结果是:

  

第一个结果

     

第二个结果

     

第三个结果

原因是你没有注册第三个听众,直到第一个结果回来。 非常可能在第二个监听器注册之前不会发生这种情况。

但这并不是一个很难的保证。使用此代码的唯一保证是第三个结果将在第一个结果之后出现。