// 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
,因为第二个呼叫等待第一个呼叫完成(并且第一个呼叫需要第三个呼叫完成,因此它认为自己已完成)。或者喜欢什么?
addValueEventListener
和addChildEventListener
有不同的优先级吗?
注意:我使用此逻辑来确定我的呼叫是否完全完成(第一次)。如果有更好的方法,欢迎您的回答。但我仍然需要知道这一点。 (和你一样,我讨厌不知道我做了什么)
答案 0 :(得分:1)
您最后一段摘录的最有可能的结果是:
第一个结果
第二个结果
第三个结果
原因是你没有注册第三个听众,直到第一个结果回来。 非常可能在第二个监听器注册之前不会发生这种情况。
但这并不是一个很难的保证。使用此代码的唯一保证是第三个结果将在第一个结果之后出现。