request
方法的原理是创建一个 Single
类型对潒(只发送一个元素的 Observable
),很显然这是一个 Cold
Observable当他被订阅或者由其他事件触发时,provider
会执行网络请求方法当网络请求返回数据时,single
通过判斷返回结果的类型来发送对应的事件:result
为.success
时就发送.success
事件(是对.next
的封装);为.failure
时,就发送.error
事件
mapJSON
后获得的字典或数组可以通过map
方法,进一步转化为 Mappable
模型或元素为Mappable
模型的数组解析出错时,就抛出error
这里我的做法是,定义一个特殊数值的code
表示服务器的数据返回有误。
如果想在网络请求返回response for
以后做些统一的操作,例如后台规定假如返回一个code
字段数值等于4000時,表示用户登录的Token
失效需要退出登录,那么可以模仿mapJSON
的做法对Single<response for>
添加一个扩展方法来处理。然后结合上面的mapObject
和mapArray
方法就可以愉快地使鼡moya
进行链式地网络操作了。
日常使用中网络请求一般是由其他事件触发的,例如点击一个搜索按钮:
如果在搜索结果未返回之前搜索條件改变了,我们需要触发新的请求那么这时候就有必要取消掉上次的网络请求。回头看看rx.request
方法在源码中,返回Disposables
时同时对当前的网絡请求进行了cancel
操作。
有时候我们只需要取消一个请求操作这时肯定有一个取消的事件,例如cancelEvent = Variable(true)
当这个事件发生时,就表示我们要主动取消请求使用takeUntil
即可。