我已经多次发送API GET请求的以下代码(示例代码)。
- (void)listOfPeople:(NSArray *)array {
for (int i = 0; i < array.count; i++) {
Person *person = [array objectAtIndex:i];
[personClient getPersonData:person.fullName onSuccess:^(id result) {
// change data here
} onFailure:^(NSError *error) {
}];
}
}
代码不能很好地工作,因为API请求每次都以不同的顺序完成。我需要按顺序完成每个api请求。我相信我需要等到完成块或故障块完成后再继续for循环。除非有更好的方法来完成这项任务,否则有人能指出我正确的方向。我已经尝试过调度组,但它没有按顺序完成每个请求。
答案 0 :(得分:0)
摆脱for
循环,而是创建一个递归函数,从完成处理程序调用自己来获取下一个Person。这样,当每个呼叫完成时,它将进行调用以获得下一个呼叫。
这样的事情:
- (void)getPersonFromArray:(NSArray *)array atIdx:(NSInteger)idx {
if (idx < array.count)
{
Person *person = [array objectAtIndex:idx];
[personClient getPersonData:person.fullName onSuccess:^(id result)
{
// Do something useful with Person here...
// ...
[self getPersonFromArray:array atIdx(idx + 1)];
} onFailure:^(NSError *error) {
// Handle errors here
// ...
}];
}
}