AngularJs 之 Promise 探究
来源:互联网 发布:邯郸学院软件学院 编辑:程序博客网 时间:2024/05/17 03:12
一、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
- AngularJs 之 Promise 探究
- AngularJS之$promise
- AngularJS Promise
- AngularJS Promise
- AngularJS Promise
- AngularJS学习之$q和promise介绍
- angularJS中$q服务之promise
- Promise对象探究
- Javascript----Promise初步探究
- Promise in AngularJS
- chained promise in angularJs
- Promise in AngularJS
- AngularJS中的Promise
- AngularJS中的Promise
- Promise in AngularJS
- Angularjs promise对象解析
- Angularjs promise对象解析
- angularjs中的promise
- activity之间的intent传值
- Linux c==sqlite3(8)
- //初学java中了解到的两种控制台输出的方法
- Linux网络编程经典书籍推荐
- 详解泛型擦除
- AngularJs 之 Promise 探究
- CSS基础-03 伪类,伪元素,before和after使用案例
- 【miscellaneous】VLC组播与接收
- unity实现切换渲染模式
- 【 51NOD 1434 素数筛 】【数论+思维+筛素数】区间LCM【找到一个最小整数M,满足M>N,LCM(N+1,N+2,..,M-1,M)是LCM(1,2,3,4,.,N-1,N) 的倍数】
- android 自定义搜索框 + 搜索提示
- ArrayList去除集合中字符串的重复值(字符串的内容相同)
- C++中字符串和数字之间的转换
- linux如何设置终端的命令提示符组合