AFNetworking-RACRetryExtensions 0.2.0

AFNetworking-RACRetryExtensions 0.2.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2015年4月

由Dal Rupnik维护。



 
依赖项
AFNetworking~> 2.x
ReactiveCocoa~> 2.x
 

  • 作者:
  • Dal Rupnik

AFNetworking - RACRetryExtensions

AFNetworking 2.0 扩展,用于通过基于特殊条件(超时等)的自动重试来添加ReactiveCocoa支持。重试条件可以设置为块,也可以基于HTTP状态码。

目前仅扩展了AFHTTPSessionManager,提供Reactive方法。对于每个HTTP操作,返回一个RACSignal。底层,对所需API进行多次调用,只有最终重试操作才会报错。

对于特定的重试逻辑,可以在方法中提供一个测试块,该块将在每次重试时被评估。如果操作返回YES,则请求将被重试。

安装

最简单的方法是使用CocoaPods,在Podfile中指定pod。

pod 'AFNetworking-RACRetryExtensions'

或者,您可以下载项目的.zip文件,将其拖放到项目中(手动方式)。

用法

RACRetryExtensionsAFHTTPSessionManager提供了一个分类,提供了多个方便的方法,这些方法返回一个包装了RACURLSessionRetryDataTaskRACSignal。方法提供了不同的配置选项,例如:在失败之前进行重试的次数、下次重试之前的休眠延迟以及重试测试块。前两个参数对应于AFNetworking中的AFHTTPSessionManager HTTP方法和参数。

以下是一个连接到简单网站的HTTP GET方法的示例。

AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];

RACSignal* getSignal = [manager rac_GET:@"http://example.org" parameters:nil retries:3 interval:10.0];

// Subscribe to signal to start request
[getSignal subscribeNext:^(id responseObject) {
    // Handle object
} error:^(NSError *error) {
    // Handle error
}];

如果请求由于任何原因失败,将重试3次。在每次重试尝试之前,任务将等待*10秒**才进行重试。以下块在成功接收响应对象时被调用,当所有重试耗尽时调用错误处理器。块提供的错误是最后一次重试收到的错误。

在某些情况下,我们不希望每次都重试,而是在网络连接不良或某些服务器状态下重试。下面的代码使用一个自定义的重试块,如果HTTP响应状态码是5xx将重试。

AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];

RACSignal* getSignal = [manager rac_GET:@"http://example.org" parameters:nil retries:3 interval:10.0 test:^BOOL(NSHTTPURLResponse *response, id responseObject, NSError *error)
{
    if (response.statusCode >= 500)
    {
        return YES;
    }
    else
    {
        return NO;
    }
}];

// Subscribe to signal to start request
[getSignal subscribeNext:^(id responseObject) {
    // Handle object
} error:^(NSError *error) {
    // Handle error
}];

联系方式

Dal Rupnik

许可证

MIT许可证