【问题标题】:PromiseKit catch multiple argumentsPromiseKit 捕获多个参数
【发布时间】:2017-06-08 16:29:14
【问题描述】:

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

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

我曾考虑将fetcher 包含在NSError 上的userInfo 字典中,但如果可能的话,我更愿意将其作为单独的参数。

编辑 - 更多信息:

这是我正在使用的适配器。 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);
        }];
    }];
}

【问题讨论】:

  • 什么是 fetcher - 它来自哪里?

标签: swift swift3 promisekit


【解决方案1】:

我在 Objective C 中使用的 Promise 不多。但是如果你能够在 swift 中编写 fetchAll 函数,那么你可以将错误和 fetcher 包装在一个 Swift 错误中。下面是一个粗略的例子——它不会编译,它只是给你一个想法。制作一些更具体的 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 {

            }
        }
    }
}

【讨论】:

  • 这对于 Swift 来说似乎是一个很好的解决方案,谢谢您的回答。但是,我需要用 Obj-C 编写它,所以现在我将返回 NSError 的 userInfo 字典中的 fetcher。
  • 这个例子对我来说似乎很奇怪!通常,一个函数会立即返回它的承诺,而一些异步任务正在工作。
     func fetchAll() -> Promise { return fetchAll(entityName, onComplete: { results in return Promise(value: results)  在这种情况下,对 fetchAll() 的调用将阻塞,直到异步任务完成并产生结果......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 2012-02-09
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 2011-03-07
相关资源
最近更新 更多