Когда запрос выполняется асинхронно, остальная часть вашего кода будет продолжаться в то же время. Ваши первые два запроса делают именно это. У вас есть два варианта.
Вы можете запустить второй запрос синхронно. (Не очень хорошая идея, поскольку ваше приложение будет отображаться «замороженным» до завершения второго запроса. Кроме того, использование этого метода не поможет вам, если второй запрос в вашем списке из трех завершится неудачей.)
Гораздо лучшая идея - использовать методы обратного вызова делегата. Это лучший способ справиться с этим по двум причинам. Прежде всего, вы можете правильно обрабатывать неудачные запросы, а также правильно обрабатывать успешные запросы. Юй хочет что-то вроде этого:
// Request 2
request2.tag = 2;
[request2 setDelegate:self];
[request2 startAsynchronous];
- (void)requestFinished:(ASIHTTPRequest *)request{
if(request.tag == 2){
[self callThirdRequest];
}
}
Убедитесь, что проверили запрос в обратном вызове делегата, чтобы убедиться, что он «второй», чтобы в конечном итоге вы не запустили неправильное действие в неподходящее время. В этом случае я использовал свойство запроса «tag». Если бы вы сохранили запрос как собственность вашего класса, вы можете просто проверить это.