我正在将PromiseKit集成到我们当前的系统中,我需要链的catch部分来使用2个参数。我希望我的捕获使用error, fetcher而不是仅仅错误。最好的方法是什么?

infoPromise.then { objects in
    print(objects)
}.catch { error in /* error, fetcher in */
    print(error)
}

我曾想过将fetcher作为userInfo字典的一部分包含在NSError中,但如果可能的话,我更希望它作为单独的参数。
编辑-更多信息:
这是我正在使用的适配器。在我的现有系统中,fetcheronError中返回。
- (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);
        }];
    }];
}

最佳答案

我在Objective C中并没有太多使用promises,但是如果您能够用swift编写fetchAll函数,那么您可以将错误包装起来,并将fetcher包装成swift错误。下面是一个粗略的例子-它不会编译,只是给你一个想法。也许最好是犯几个更具体的承诺错误来指明实际的错误,而不是像我所做的那样只犯一个错误,然后不通过N错误。

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 {

            }
        }
    }
}

10-08 07:26