如何防范“PMKWhen”永远不会实现的情况?

时间:2018-06-07 01:34:09

标签: ios objective-c promisekit

我有一种情况,我正在创建几个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方法吞下异常,但我宁愿不触摸该代码,因为它在应用程序中广泛使用。相反,有没有办法使用PMKWhenResolved修改Recover对象,以防止我们从Web服务收到错误时挂起应用程序?我是使用PromiseKit的新手,所以我愿意接受比我在这里提出的更好的解决方案。

0 个答案:

没有答案