首页 > 解决方案 > rxswift operator share replay 不能用?

问题描述

我需要做的是,我有很多网络请求,一次后端会返回一个令牌过期错误,所有的请求都会收到这个错误,他们都应该挂断,这个时候我需要发送一个刷新令牌要求。刷新令牌请求完成后,所有暂停的网络请求都应使用新令牌重新启动。

现在我使用retryWhen运营商来处理令牌过期错误,并挂断网络。我使用share replay运算符仅发送一次刷新令牌请求。

networkReqeust.retryWhen({ (error: Observable<TokenError>)  in

                           error.flatMap{ error -> Observable<()> in
                               switch error {
                               case .TokenExpired:

                                return RefreshTokenObservable.share(replay: 1).flatMap({ (result) -> Observable<()> in
                                       switch result {

                                       case .RefreshSuccess:

                                           return Observable.empty()
                                       case .RefreshFailure:      
                                           throw error
                                       }
                                   })
                               }
                           }
                       })



let RefreshTokenObservable: Observable<TokenRefresh> = {

    let config = URLSessionConfiguration.default
    let session = URLSession.init(configuration: config)
    let refreshTokenrequest = URLRequest(url: url!)

    return  session.rx.response(request: refreshTokenrequest).share(replay: 1).observeOn(MainScheduler.instance).flatMapLatest{ (data, response) -> Observable<TokenRefresh> in

        let responseModel = ResponseModel(data:response)
            if responseModel.status {
                return Observable.just(TokenRefresh.RefreshSuccess)
            } else {
                return Observable.just(TokenRefresh.RefreshFailure)
            }
        }.observeOn(MainScheduler.instance)
}()

现在刷新令牌请求仍然启动多次,我做错了。为什么share replay操作员不工作

标签: iosswiftsystem.reactiverx-swift

解决方案


推荐阅读