2017-10-01 2 views
1

Ich verwende ReSwift und RxSwift (ohne diese Informationen würde die Frage keinen Sinn machen).ReSwift ActionCreator mit Callback/Rückgabe Observable nach dem Versand

Gibt es eine Standardmethode zum Versenden eines Aktionserstellers in ReSwift und nachdem etwas passiert ist, nachdem die Verarbeitung abgeschlossen ist (d. H. Abgeschlossene Verarbeitungsaktionen und alle internen Anforderungen, die im Aktionsersteller auftreten können)?

ich weiß, einen Weg, dies zu erreichen:

func myActionCreator(_ callback:() -> Void) -> (state: AppState, store: Store<AppState>) -> Action? { 
    return { state, store in 
     _ = someRequest().subscribe(onNext: { _ in 
      callback() 
     }) 

     return nil 
    } 
} 

store.dispatch(myActionCreator({ 
    // callback 
})) 

Aber es gibt zwei Probleme mit diesem:

  1. ich eher eine Standardmethode verwenden würde
  2. ich auch diesen Rückruf benötigen als ein Observable Objekt.

den zweiten Grund zu erklären, ich brauche so etwas wie:

let observable = store.dispatch(myActionCreator)

so kann ich die observable Variable verwenden, wie ich will.

Sicher, ich könnte alle diese Logging selbst implementieren und habe so etwas wie eine store.dispatchReturningObservable als eine Erweiterung der Store, aber ich bin auf der Suche nach einem einfacheren Weg.

Gibt es eins?

Antwort

0

Die beste Lösung, die ich habe kommen mit, war dies:

extension Store { 

    func dispatchObservable(_ callbackActionCreator: @escaping (@escaping() -> Void) -> (State, Store<State>) -> Action?) -> Observable<State> { 
     return Observable.create({ observer in 
      let actionCreator = callbackActionCreator({ 
       observer.onNext(self.state) 
       observer.onCompleted() 
      }) 

      self.dispatch(actionCreator) 

      return Disposables.create() 
     }) 
    } 

} 

ich diese Antwort nicht akzeptieren, weil ich für einen einfacheren/mehr Standardweg noch auf der Suche bin.