質問

最初のFirebase呼び出しを持つメインコード:

     refFB.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
                FirebaseReq fbReq = snapshot.getValue(FirebaseReq.class);
                service(fbReq);
            }
...
        });
.

メンテナンスと読みやすさは私がこれをはるかに明確にするためのものです:

Run service(fbReq) in new thread.

 public void service(FirebaseReq firebaseReq) {
            value = dao(firebaseReq);
            /*some other code which use value*/
 }

public String dao(FirebaseReq firebaseReq) {
        String result = null;
        //the second firebase call
        childRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
               result = snapshot.getName();
            }
          ...
       });
        while (result== null){
        }   
        return result;
}
.

またはスレッドと待機ループを回避するのが向上しているが、読み取り不可のコードが付いている:

 public void service(FirebaseReq firebaseReq) {
     ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
               /*some other code which use value*/
            }
          ...
       });
     dao(firebaseReq,valueEventListener);              
 }

public String dao(FirebaseReq firebaseReq,ValueEventListener valueEventListener) {
        //the second firebase call
        childRef.addListenerForSingleValueEvent(valueEventListener);
}
.

返信をありがとう

役に立ちましたか?

解決

非同期コールバックはほとんど待ちに常に優先されます。あなたが使っているように特に忙しい待ち望んでいます。

私は実際にあなたのコールバックコードクリーナーを見つけます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top