我使用ReSwift和RxSwift(没有这些信息,这个问题就没有多大意义了。)
是否有一种标准方法可以在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
}))
但这有两个问题:
Observable
对象。为了解释第二个原因,我需要这样的东西:
let observable = store.dispatch(myActionCreator)
所以我可以随意使用observable
变量。
当然,我可以自己实现所有记录,并将store.dispatchReturningObservable
作为Store
的扩展,但我正在寻找一种更简单的方法。
有吗?
答案 0 :(得分:-1)
我提出的最佳解决方案是:
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()
})
}
}
我不接受这个答案,因为我仍然在寻找一种更简单/更标准的方式。