PromiseKit 在 Promises 中包装外部闭包
PromiseKit wrapping external closure in Promises
我在 Swift 中使用外部库,所以我无法控制 return 语句。我的理解是,为了使用 PromiseKit,我应该将这些 return 包装在 promises 中。这是正确的吗?
假设是这样,我的工作代码如下:
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 { ... }
语法调用的承诺。因此,我尝试做如下:
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()
}
})
}
}
但是这种方法不起作用,我得到 "Unable to infer closure type in the current context"。我试图找到一个在线完成的这个用例的好例子,但遇到了麻烦。关于如何正确 return promises 有什么想法吗?
假设 TCHMemberPaginator
和 TCHMembers
如下,
class TCHMemberPaginator {}
class TCHMembers {
func members(completion: (Bool, TCHMemberPaginator?) -> Void) {}
}
这是 return 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())
}
})
}
}
我在 Swift 中使用外部库,所以我无法控制 return 语句。我的理解是,为了使用 PromiseKit,我应该将这些 return 包装在 promises 中。这是正确的吗?
假设是这样,我的工作代码如下:
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 { ... }
语法调用的承诺。因此,我尝试做如下:
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()
}
})
}
}
但是这种方法不起作用,我得到 "Unable to infer closure type in the current context"。我试图找到一个在线完成的这个用例的好例子,但遇到了麻烦。关于如何正确 return promises 有什么想法吗?
假设 TCHMemberPaginator
和 TCHMembers
如下,
class TCHMemberPaginator {}
class TCHMembers {
func members(completion: (Bool, TCHMemberPaginator?) -> Void) {}
}
这是 return 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())
}
})
}
}