0

我在使用AFNetworking使服务呼叫的应用以下情形:AFHTTPRequestOperation依赖

  1. 我称之为一种特殊的服务,将产生对我来说令牌
  2. 我打电话,我想要的服务,发送此令牌作为参数
  3. 我调用另一个特殊服务来销毁令牌。

我必须按照我每次向服务器请求时这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点后执行,所以我使它依赖于将使我获得令牌的操作。

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

+0

我quess您可以创建一个*变量*在某个对象或当前的操作调用者中出现。当第一个操作完成时,它将令牌设置为这个*变量*。当下一个操作被调用时,它会检查这个*变量*中是否有一个值。 – Massmaker

回答

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 
});