PromiseKit 使用


PromiseKit 简介

异步编程 App 开发中用得非常频繁,但异步请求后的操作却比较麻烦。Promise 就是解决这一问题的编程模型。其适用于 延迟(deferred) 计算和 异步(asynchronous) 计算。一个 Promise 对象代表着一个还未完成,但预期将来会完成的操作。它并非要替代 GCD 和 NSOperation,而是与它们一起合作。


Promise 的出现已经很久了,这个术语首页在 C++ 中出现,之后被用在 E 语言中。2009年,提出 CommonJS 的 Promises/A规范。它能在今天变得如此引人注目,则得归功于 jQuery 框架了,随着 jQuery 1.5 版本中的 Promises 实现,越来越多的人喜欢上它了。


Promise 模式,可以简单理解为延后执行。Promise,中文意思为发誓(承诺),既然都发誓了,也就一定会有某些行为的发生。Promise 对象是一个返回值的代理,这个返回值在promise对象创建时未必已知。它允许你为异步操作的成功或失败指定处理方法。 这使得异步方法可以像同步方法那样返回值:异步方法会返回一个包含了原返回值的 promise 对象来替代原返回值。

  • pending: 初始状态, 非 fulfilled 或 rejected.
  • fulfilled: 成功的操作.
  • rejected: 失败的操作.



pending状态的promise对象既可转换为带着一个成功值的 fulfilled 状态,也可变为带着一个 error 信息的 rejected状态。当状态发生转换时,promise.then 绑定的方法就会被调用。(当绑定方法时,如果 promise 对象已经处于 fulfilled 或 rejected 状态,那么相应的方法将会被立刻调用, 所以在异步操作的完成情况和它的绑定方法之间不存在竞争条件。)  因为 Promise.then 方法会返回 promises 对象, 所以可以链式调用,待会咱们就会看到的。


PromiseKit(https://github.com/mxcl/PromiseKit)是支持使用 Promise 的另外一个库。它甚至做得更好,因为它可以帮助避免代码向右漂移。

1 向右漂移的 Promise

[[[[

      [[HPNetworkServicesharedInstance] promise:rq1]

         subcribeNext:^(id data1) {
return [[HPNetworkServicesharedInstance]      promise:rq2];

        }]
subscribeNext:^(id data2) {

           return [[HPNetworkService sharedInstance] promise:rq3]; }]

       subscribeNext:^(id data3) { 

}] }];

例2  不向右漂移的 Promise

[NSURLConnection promise:rq1].then(^(id data1){

      return [NSURLConnection promise:rq2];

}).then(^(id data2){

     
return [NSURLConnectionpromise:rq3];

}).then(^(id data3){


     // !代码看起来很连贯!

});


安装

    使用 CocoaPods 安装

       很简单:pod “PromiseKit”, “~> 4.0” 就可以了。

使用:

    1.PMKUIKit.h 使用

     

        UIViewController  的使用

               在注释中有关于使用的说明,但是有点一些问题需要做一点更改才可以使用,代码如下:

             

        

         

         

 

   2.PromiseKit.h 使用

     实例:一个图片下载请求方式

    

    修改后

   

  

demo
      https://github.com/kangxg/ThreadLock.git

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值