本文主要是介绍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对象(触发一个异步请求),那么下一个处理函数在请求结束后会立即被调用。
好了,打完收工。下次再战。
这篇关于AngularJs 之 Promise 探究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!