我将PromiseKit集成到我们当前的系统中,我需要链的catch
部分使用2个参数。我喜欢使用error, fetcher
而不是错误。这样做的最佳方式是什么?
infoPromise.then { objects in
print(objects)
}.catch { error in /* error, fetcher in */
print(error)
}
我已考虑将fetcher
作为userInfo
字典的一部分加入NSError
,但如果可能,我更喜欢将其作为单独的参数。< / p>
编辑 - 更多信息:
这是我正在使用的适配器。从我现有系统的fetcher
返回onError
。
- (AnyPromise *)fetchAll:(NSString *)entityName {
return [AnyPromise promiseWithAdapterBlock:^(PMKAdapter _Nonnull adapter) {
[self fetchAll:entityName onComplete:^(NSArray *results) {
adapter(results,nil);
} onError:^(ICSHTTPFetcher *fetcher, NSError *error) {
adapter(nil,error);
}];
}];
}
答案 0 :(得分:1)
我没有在Objective C中使用过多的promises。但是如果你能够在swift中编写fetchAll函数,那么你可以将错误和fetcher包装在Swift错误中。下面是一个粗略的例子 - 它不会编译,只是为了给你一个想法。制作一些更具体的PromiseErrors可能会更好,这些PromiseErrors指示实际错误,而不仅仅是我所做的那个,然后不通过NSError。
enum PromiseErrors: Error {
case fetchAll(NSError, ICSHTTPFetcher)
}
struct Test {
func fetchAll() -> Promise<Any> {
return fetchAll(entityName, onComplete: { results in
return Promise(value: results)
}, error: { fetcher, error in
return Promise(error: PromiseErrors.fetchAll(error, fetcher))
})
}
func test() {
infoPromise.then { objects in
print(objects)
}.catch { error in
if let case PromiseErrors.fetchAll(error, fetcher) = error {
}
}
}
}