Moya请求没有为一个提供商启动,但适用于另一个提供商

时间:2018-04-11 08:26:04

标签: ios swift rx-swift moya

我继承了一个使用 Moya RxSwift 项目。我有一项任务是将请求从一个后端移动到另一个后端。两个后端的TargetType设置都很好,因为它们在其他地方广泛使用。

原始请求如下所示:

return accessProvider.rx
    .request(request)
    .asObservable()
    .debug()
    .flatMapLatest({ [weak self] (response) -> Observable<Bool> in
        //does some processing of the JSON
        return just(true)
    })
    .catchError({ (error) -> Observable<Bool> in
        return just(false)
    })

这很好,我得到了数据。

我的新请求完全相同,但唯一的区别是提供商和请求正在使用第二个TargetType。对于这个请求,请求永远不会发生(与Charles确认)。我检查了TargetType它看起来很好并且执行非Rx Moya请求工作正常,我订阅它的Rx请求也是如此。

为什么使用flatMapLatest不起作用?

我是Rx的新手,也是Moya的新人,所以感谢任何帮助。

编辑: 第一个提供者的调试消息:

Refresh token -> subscribed
Refresh token -> subscribed
Refresh token -> Event next(Status Code: 200, Data Length: 773)

第二

Refresh token -> subscribed

没有别的

2 个答案:

答案 0 :(得分:2)

问题不在MoyaTargetType。 如你所说

  

...它看起来很好并且执行非Rx Moya请求工作正常,我订阅它的Rx请求也是如此。

如果没有订阅,则不会触发Rx中的Observable。

在您的示例中,您将返回一个Observable,如果您订阅它,一切都应该正常工作。这实际上是一种预期的行为,因为您不想忽略服务器响应,您希望相应地采取行动。在您的情况下,如果请求成功,Bool将作为指示符返回,因此您可能希望让用户知道他是否成功完成了他的操作,或者停止加载指标或其他内容。

答案 1 :(得分:1)

确保保留它所拥有的提供程序或依赖关系链。我在past中有保留问题。