AngularJs 之 Promise 探究

一、Promise 存在的意义

  解决代码层次变深后,带来的难以阅读、调试、维护、升级这些难题。

二、JavaScript传统的异步调用是使用回调函数,当我们需要对三个及三个以上的服务器进行调用访问时,如果使用回调函数的方式,那就是一层嵌套一层,最后就不知道嵌套到哪里去了,而且每一层之间如果涉及到参数的传递或者返回值的共享,那可真的是要玩死你 @_@ 。最终结果要不就是写一个几十上百行的一个嵌套层,就像俄罗斯的套娃,要不就是写几十个 fuction 管理每一层的参数和返回值。要是命名再不规范一点(用重庆话说就是:脑壳都要给你仔儿扣爆)#_#

Promise实现这种业务的时候,只能用行云流水来形容,齐刷刷地干完。


$http.get('/api/test').then(function(cresponse){//访问第一个server
  return $http.get('/api/' + cresponse.data.key);//访问第二个server 此时返回一个Promise对象 可供下一层级调用
}).then(function(aresponse){
  return $http.get('/zs/' + aresponse.data.api);访问第三个server 此时返回一个Promise对象 可供下一层级调用
}).then(function(bresponse){
  //最终成功时的处理,当然你也可以一直向下调用
},function(error){
  //最终失败的处理
});

没有一层层嵌套的代码,是不是清爽多了。  慢着!你说还看不出有什么好处,好吧,那我就上原始的JavaScript模拟访问服务器,实现上面的功能。(注:我们假定以下代码块中的Hget方法是封装好的访问服务器的方法(博主是个大懒虫!!  哪昵?懒也是本程程的'美好品质'。))

Hget('/api/test', function(result){//第一层访问
  Hget('/api/', function(result){//第二层
<pre name="code" class="javascript">    Hget('/api/', function(result){//第三层<pre name="code" class="javascript">       if(result.data.success){
          console.log(result.data.msg);
       } 
});

 });}) 
 

好了,效果出来了。

三、Promise 能实现以下功能

1. 每一个异步任务都会返回一个promise对象

2. 第一个promise 函数都含有一个then函数,成功及错误处理函数

3. 当异步任务结束时, 处理成功和失败的函数都只会被调用一次。

4. then 函数同样会返回一个promise对象

5. 每一个处理函数,都可以返回值并传入下一个函数链中。

6. 如果处理函数返回promise对象(触发一个异步请求),那么下一个处理函数在请求结束后会立即被调用。


好了,打完收工。下次再战。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值