1

我正在使用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对象。

为了解释第二个原因,我需要类似的东西:

let observable = store.dispatch(myActionCreator)

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

当然,我可以自己实现所有这些日志记录,并拥有类似 astore.dispatchReturningObservable作为 的扩展Store,但我正在寻找一种更简单的方法。

有吗?

4

1 回答 1

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

}

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

于 2017-10-01T21:46:54.840 回答