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.manager является экземпляром AFHTTPRequestOperationManager, но есть проблема - я не имею значения для token.

Поскольку myRequestOperation должен выполняться только после пункта 1 из списка выше, я делаю его зависимым от операции, которая даст мне токен.

Теперь приходит мое замешательство - как я могу создать операцию, которая использует параметр из предыдущей операции, когда мне нужно, чтобы оба они были созданы, чтобы заставить их зависеть от другого?

+0

мой Quess вы можете создать * переменную * в каком-либо объекте или в текущем вызывающем абоненте afhttp-operation. И когда первая операция завершается, она устанавливает токен этой * переменной *. Когда будет вызываться следующая операция, она проверяет, есть ли значение oken в этой * переменной *. – 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 
});