2

我继承了一个使用Moya的RxSwift项目。我的任务是将请求从一个后端移动到另一个后端。两个后端的s 设置都很好,因为它们在其他地方被广泛使用。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。对于这个,请求永远不会发生(与查尔斯确认)。我已经检查过了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

没有其他的

4

2 回答 2

4

确保保留提供者或它在某处保存的依赖链。我过去在保留方面遇到过问题。

于 2018-04-11T13:35:17.950 回答
2

问题不在于MoyaTargetType。如你所说

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

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

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

于 2018-04-11T09:14:50.317 回答