2017-10-01 23 views
1

我使用的是ReSwiftRxSwift(沒有這些信息,這個問題沒有多大意義)。ReSwift ActionCreator帶有回調/在發送後返回observable

在ReSwift中有沒有一種標準的派發動作創建器的方法,並且在完成處理後發生了一些事情(即,完成處理動作和可能發生在動作創建器內部的所有內部請求)?

我知道要實現這一目標的一種方法:

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 
})) 

但也有2個問題與此:

  1. 我寧願用一種標準的方式
  2. 我也需要這個回調作爲Observable對象。

爲了解釋第二個原因,我需要的是這樣的:

let observable = store.dispatch(myActionCreator)

這樣我就可以使用observable變量作爲我請。

當然,我可以實現所有登錄自己,並有一個像store.dispatchReturningObservable作爲Store的擴展,但我正在尋找一個更簡單的方法。

有沒有?

回答

0

最好的解決方案我已經出來是這樣的:

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() 
     }) 
    } 

} 

我不會接受這個答案,因爲我還在尋找一個簡單/更標準的方式。