PromiseKit 在 Promises 中包装外部闭包
Posted
技术标签:
【中文标题】PromiseKit 在 Promises 中包装外部闭包【英文标题】:PromiseKit wrapping external closure in Promises 【发布时间】:2018-10-27 23:58:02 【问题描述】:我在 Swift 中使用了一个外部库,所以我无法控制返回语句。我的理解是,为了使用 PromiseKit,我应该将这些返回值包装在 Promise 中。这是正确的吗?
假设是这样,我的工作代码如下:
private func getChannelImage(for channel: TCHChannel, completion: @escaping (UIImage?, CAProfileError?) -> Void)
if let members = channel.members
members.members(completion: (result, paginator) in
if result.isSuccessful()
// ... do something
else
completion(nil, CAProfileError.UnknownError)
)
这可能很难阅读。我正在尝试使用 PromiseKit 来简化它。首先,我想将members.members(completion: (result, paginator)
简化为可以使用firstly ...
语法调用的promise。因此,我尝试执行以下操作:
private func asPromise(members: TCHMembers) -> Promise<TCHMemberPaginator>
return Promise<TCHMemberPaginator> fulfill, reject in
members.members(completion: (result, paginator) in
if result.isSuccesful()
fulfill(paginator)
else
reject()
)
但是这种方法不起作用,我得到“无法在当前上下文中推断闭包类型”。我试图找到一个在线完成的用例的好例子,但遇到了麻烦。关于如何正确返回承诺的任何想法?
【问题讨论】:
【参考方案1】:假设TCHMemberPaginator
和TCHMembers
如下,
class TCHMemberPaginator
class TCHMembers
func members(completion: (Bool, TCHMemberPaginator?) -> Void)
这里是返回Promise
的方法,
private func asPromise(members: TCHMembers) -> Promise<TCHMemberPaginator>
return Promise seal in
members.members(completion: (result, paginator) in
if result == true, let p = paginator
seal.fulfill(p)
else
seal.reject(NSError())
)
【讨论】:
我在某处发现他们删除了对完成的支持,拒绝支持密封,这是我的问题。以上是关于PromiseKit 在 Promises 中包装外部闭包的主要内容,如果未能解决你的问题,请参考以下文章