AFHTTPRequestOperation依赖

时间:2015-09-30 19:24:49

标签: ios objective-c afnetworking afnetworking-2 afhttprequestoperation

我在使用AFNetworking进行服务调用的应用程序中有以下场景:

  1. 我打电话给我生成令牌的特殊服务
  2. 我调用我想要的服务,将此令牌作为参数发送
  3. 我打电话给另一个特殊服务来销毁令牌。
  4. 每次向服务器发出请求时,我都必须遵循这3个步骤。我不能改变服务器的工作方式,所以我必须遵守这个要求。我也不能对多个请求使用相同的令牌。

    我的问题如下 - 我尝试使用AFHTTPRequestOperation s:

    完成此操作
    NSError *serializationError = nil;
    NSMutableURLRequest *request = [self.manager.requestSerializer requestWithMethod:@"POST" URLString:[[NSURL URLWithString:@"serviceName.json" relativeToURL:self.manager.baseURL] absoluteString] parameters:@{ @"token": token } error:&serializationError];
    AFHTTPRequestOperation *myRequestOperation = [self.manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
        // Success login
    } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
        // Failure logic
    }];
    
    [myRequestOperation addDependency:createTokenRequestOperation];
    

    其中self.managerAFHTTPRequestOperationManager的实例,但存在问题 - 我没有token的值。

    由于myRequestOperation应仅在上面列表中的第1点之后执行,因此我依赖于将获得令牌的操作。

    现在我的困惑 - 如何创建一个使用前一个操作的参数的操作,当我需要实例化它们以使一个依赖于另一个时?

1 个答案:

答案 0 :(得分:0)

由于我无法找到适合我的解决方案,我最终使用PromiseKit,这允许我链接异步调用:

[NSURLConnection promise:rq1].then(^(id data1){
    return [NSURLConnection promise:rq2];
}).then(^(id data2){
    return [NSURLConnection promise:rq3];
}).then(^(id data3){
    // Work with the data returned from rq3
});