ReSwift ActionCreator在调度后带回调/返回可观察

时间:2017-10-01 03:08:08

标签: swift rx-swift swift4 reswift

我使用ReSwiftRxSwift(没有这些信息,这个问题就没有多大意义了。)

是否有一种标准方法可以在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
}))

但这有两个问题:

  1. 我宁愿使用标准方式
  2. 我还需要将此回调作为Observable对象。
  3. 为了解释第二个原因,我需要这样的东西:

    let observable = store.dispatch(myActionCreator)

    所以我可以随意使用observable变量。

    当然,我可以自己实现所有记录,并将store.dispatchReturningObservable作为Store的扩展,但我正在寻找一种更简单的方法。

    有吗?

1 个答案:

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

}

我不接受这个答案,因为我仍然在寻找一种更简单/更标准的方式。