我有一种情况,我正在创建几个promises,每个promises同时运行。正如您在此处所看到的,该集合包含在PMKWhen
对象中
for (NSString *key in dict.allKeys) {
NSString *value = [dict objectForKey:key];
AnyPromise *categoryPromise = [self createOriginalsCategoryWithDisplayName:key andCategoryId:value];
[promises addObject:categoryPromise];
}
// Create SUBSCRIBED content category.
AnyPromise *subscriberEpisodesPromise = [self createFrontSubscribedCategory];
[promises addObject:subscriberEpisodesPromise];
return PMKWhen(promises);
每个promise都会调用一个Web服务,该服务返回json
个有效负载。处理该有效负载,返回结果字典,并履行承诺。在极少数情况下,Web服务会返回错误,在这些情况下,处理代码会抛出异常而不是返回字典。
return self.createApiAuthenticationHeaders
.then(^(NSDictionary *apiAuthHeaders) {
//Gets json payload from web service
})
.then([self analyzeJsonBlock:[NSDictionary class]]) //Chokes here
.then(^(NSDictionary *json) {
//We never get here when analyzeJsonBlock chokes
NSArray *rawCategories = json[@"result"];
//Does some stuff
return PMKManifold([categories copy], totalItems);
});
当发生这种情况时,我的应用程序会挂起,因为它会继续等待所有承诺完成。理想情况下,我会停止analyzeJsonBlock
方法吞下异常,但我宁愿不触摸该代码,因为它在应用程序中广泛使用。相反,有没有办法使用PMKWhen
或Resolved
修改Recover
对象,以防止我们从Web服务收到错误时挂起应用程序?我是使用PromiseKit的新手,所以我愿意接受比我在这里提出的更好的解决方案。