我从事异步编程已经有一段时间了,我想我理解这些概念,但是我觉得我没有得到某种场景。查看代码:
-(void)someMethod:completionHandler:(void (^)(int result))handler
{
[anotherObject asyncMethod1Success:^(NSDictionary *dict)
{
if ([dict[@"someKey"] isEqualToString:kString1])
{
// some code
if (handler)
{
handler(1);
}
}
else if ([dict[@"someKey"] isEqualToString:kString2])
{
// some different code
if (handler)
{
handler(1);
}
}
else if ([dict[@"someKey"] isEqualToString:kString3])
{
// even different code
[anotherObject asyncMethod2Success:^(NSDictionary *dict)
{
if (handler)
{
handler(1);
}
}
failure:^(NSError *error)
{
if (handler)
{
handler(2);
}
}];
}
}
failure:^(NSError *error)
{
if (handler)
{
handler(2);
}
}];
}
基本上,一旦出现错误或两个异步操作都成功返回,就需要调用处理程序。我觉得这里有重复的代码,我不知道我能做些什么。我不能在 asyncMethod1 的成功块中无条件地调用 handler() 因为 case #3 需要它的异步方法成功或失败才能被调用。
任何人都可以建议一种模式来帮助这里吗?在使用像这样的嵌套异步操作时,我感到最不舒服。