iOS/AFNetworking 3.0:按顺序完成多个请求
iOS/AFNetworking 3.0: Complete multiple requests in order
下面的代码(示例代码)多次发送 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 循环。除非有更好的方法来完成这项任务,否则有人能指出我正确的方向吗?我试过调度组,但它没有按顺序完成每个请求。
摆脱 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
// ...
}];
}
}
下面的代码(示例代码)多次发送 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 循环。除非有更好的方法来完成这项任务,否则有人能指出我正确的方向吗?我试过调度组,但它没有按顺序完成每个请求。
摆脱 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
// ...
}];
}
}