Moya 请求未针对一个提供商启动,但适用于另一个提供商
Posted
技术标签:
【中文标题】Moya 请求未针对一个提供商启动,但适用于另一个提供商【英文标题】:Moya request not started for one provider but works for another 【发布时间】:2018-04-11 08:26:03 【问题描述】:我继承了一个使用 Moya 的 RxSwift 项目。我的任务是将请求从一个后端移动到另一个后端。两个后端的TargetType
s 设置都很好,因为它们在其他地方被广泛使用。
原始请求如下所示:
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
没有别的
【问题讨论】:
【参考方案1】:确保保留提供者或它在某处保存的依赖链。我在past 中遇到了保留问题。
【讨论】:
就是这样,这是两个提供者之间的唯一区别,一个是实例变量。非常感谢!【参考方案2】:问题不在于Moya
或TargetType
。
正如你所说的
...它看起来很好,执行非 Rx Moya 请求工作正常,我订阅它的 Rx 请求也是如此。
如果没有订阅,则不会触发 Rx 中的 Observables。
在您的示例中,您将返回一个 Observable,如果您订阅它,一切都应该可以正常工作。这实际上是一种预期行为,因为您不想忽略服务器响应,而是想采取相应的行动。在您的情况下,如果请求成功,则 Bool 将作为指示器返回,因此您可能想让用户知道他的操作是否成功,或者停止加载指示器或其他内容。
【讨论】:
根据我的问题,我在上面发布的代码对于其中一个提供者来说工作得非常好,但对于另一个提供者却不是。 你能告诉你 TargetType 的定义和debug
的输出是什么
添加了调试。 TargetType 实际上不可能发布,因为它主要包含专有信息。但是,我一遍又一遍地检查它,它的内容与第一个相同。以上是关于Moya 请求未针对一个提供商启动,但适用于另一个提供商的主要内容,如果未能解决你的问题,请参考以下文章
Pygame:这个 spritesheet 代码适用于另一个项目,但不适用于这个项目。为啥?