Das Problem wird von der Initialisierung und dem Abrufen von Daten von Firebase übernommen, jedoch werde ich dies in Pseudo übersetzen, damit diejenigen, die nicht vertraut sind, auch beitragen können. Bitte beachten Sie den folgenden Code: `Was ist das korrekte Architekturdesign hier?
//Given the following API (from Firebase)
MyRemoteDBClass.asyncAuthenticate(initCompletedListener);
MyRemoteDBClass.asyncDataFetch(fetchCompletedListener)
// of course you have to authenticate before fetching the data
Class MyClassA.init()
{
MyRemoteDBClass myRemoteDBClassInstance = new MyRemoteDBClass();
myRemoteDBClassInstance.asyncAuthenticate(some_listener);
}
// Then somewhere in the app:
Class MyClassB.asyncDataFetch(MyRemoteDBClass myRemoteDBClassInstance){
myRemoteDBClassInstance.asyncDataFetch(myClassBObject_as_listener)
}`
Das Problem ist, dass die Anrufe von KlasseA und ClassB in Timeline ziemlich nahe sind, und ich weiß nicht, ob ich das asyncFetch vor oder nach der init von myRemoteDBClassInstance rufen erhalten war schon fertig.
Wie kann ich versprechen, dass ich die Methode myRemoteDBClassInstance.asyncDataFetch in MyClassB aufrufen muss, nachdem die Initialisierung abgeschlossen wurde?
Sie können die 'init()' Operation blockieren, so dass auf die Authentifizierung gewartet wird. Sie benötigen ein "CountDownLatch" (initialisiert mit einem Wert von 1), das zwischen dem Listener und der 'init()' Methode geteilt wird. Im Listener können Sie 'latch.countDown()' und in 'init()' - 'latch.await()' –