很多异步任务导致闭包嵌套,陷入回调地狱。PromiseKit正是为了解决这个问题,笔者初次尝试之后发现代码确实简洁了不少,代码也更加易读。
集成
pod 'PromiseKit/CorePromise'
基本使用
/// examples
private func request() -> Promise<Any> {
return Promise(resolver: { (resolver) in
Alamofire.request("https://www.example.com/").responseJSON(completionHandler: { (response) in
switch response.result {
case .success(let dict):
resolver.fulfill(dict)
case .failure(let err):
resolver.reject(err)
}
})
})
}
private func twoRequest() -> Promise<Void> {
return firstly {
// 第一次请求
request()
}.then{ (v) -> Promise<Any> in
// 完成第一次请求之后请求第二次
return self.request()
}.done { (v) in
print("done")
}
}
更多
- resolver.fulfill表示成功(success),resolver.reject(err)表示失败(fail),resolver.resolve表示完成(complete)
-
上面的代码没有weak self,很多同学会有疑问:这样会不会产生循环引用呢?下面是开发者的回复
简单来说基本不用担心
- 更多使用大家可以参见PromiseKit-Github