ios - 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
操作员不工作
解决方案
推荐阅读
- php - 在“where”中使用变量时,数据不会显示在视图中
- php - 需要帮助在正则表达式和 PHP 中进行否定匹配(如果找到条件则排除匹配)
- android - Firebase Messaging 无法向服务器应用发送通知
- python - 性能问题:查找点位于哪个多边形中
- java - 可以索引并保存两个值的 Java 数据结构
- c# - 如何使用 c# 在骆驼案例中将文档保存在 mongo 中?
- java - org.eclipse.jetty.websocket.jsr356.server.ServerContainer 无法转换为 org.apache.tom cat.websocket.server.WsServerContaine
- asp.net-mvc - 更改连接字符串名称会导致 DataReader 打开错误
- java - 如何在 Java 中生成非 UTF-8 字符串/字符以用于测试目的?
- python - 如何将C文件导入python