jquery的promise处理嵌套请求
来源:互联网 发布:股票交易软件 手机版 编辑:程序博客网 时间:2024/06/04 17:42
之前因为没有了解过promise,所以当有某个请求依赖于上一个请求的时候,我都是用的嵌套请求,这样代码就会变得很复杂,很不容易读懂,所以今天去了解了一下promise,就将正在写的项目改了一下,用了promise:
一下附上promise处理嵌套请求的用法:
$.getJSON(instance_url + "service="+$('#id_service').val()+"&instance="+$('#id_instance').val()+"&start_time="+timeSwitch($('#id_start_time').val())+"&end_time="+timeSwitch($('#id_end_time').val())) .then(function(res){ gen_items_tree_instance('#instance_item_tree', res); return $.getJSON(container_url + res.relations.url_parameters); },function(jqxhr, textStatus, error){ console.log( "Request Failed: " + textStatus + " " + error); $('#instance_item_tree').text("查询失败,请重试"); }) .then(function(res){ gen_items_tree_instance('#container_item_tree', res); return $.getJSON(machine_url + res.relations.url_parameters); },function(jqxhr, textStatus, error){ console.log( "Request Failed: " + textStatus + " " + error); $('#container_item_tree').text("查询失败,请重试"); }) .then(function(res){ gen_items_tree_instance('#machine_item_tree', res); },function(jqxhr, textStatus, error){ console.log( "Request Failed: " + textStatus + " " + error); $('#machine_item_tree').text("查询失败,请重试"); });这样代码就比之前看起来顺眼多了。
然后上网了解了一下promise的实现方式,看到某篇博客写的不错,在这里附上链接以及核心代码实现:
http://segmentfault.com/a/1190000000684654
var Promise = function() { this.doneList = []; this.failList = []; this.state = 'pending';};Promise.prototype = { constructor: 'Promise', resolve: function() { this.state = 'resolved'; var list = this.doneList; for(var i = 0, len = list.length; i < len; i++) { list[0].call(this); list.shift(); } }, reject: function() { this.state = 'rejected'; var list = this.failList; for(var i = 0, len = list.length; i < len; i++){ list[0].call(this); list.shift(); } }, done: function(func) { if(typeof func === 'function') { this.doneList.push(func); } return this; }, fail: function(func) { if(typeof func === 'function') { this.failList.push(func); } return this; }, then: function(doneFn, failFn) { this.done(doneFn).fail(failFn); return this; }, always: function(fn) { this.done(fn).fail(fn); return this; }};function when() { var p = new Promise(); var success = true; var len = arguments.length; for(var i = 0; i < len; i++) { if(!(arguments[i] instanceof Promise)) { return false; } else { arguments[i].always(function() { if(this.state != 'resolved'){ success = false; } len--; if(len == 0) { success ? p.resolve() : p.reject(); } }); } } return p;}但好像es6并未采用这种办法实现,但是思路是很不错的,后续我会继续研究一下es6的实现,再跟进。。。。。
0 0
- jquery的promise处理嵌套请求
- Promise处理有依赖的连续请求
- jquery回调嵌套的解决方案。promise模式
- ajax开发:Promise解决多个异步Ajax请求导致的代码嵌套问题
- 使用jQuery的Promise
- jquery 的 promise编程
- JQuery的Promise详解
- 认识jQuery的Promise
- RxJava处理嵌套请求
- JQuery的Promise详解(一):Promise基础
- JQuery的Promise详解 : Promise基础
- Rxjava+Retrofit嵌套处理请求,并优雅的处理异常
- Promise与函数嵌套的对比
- jQuery的promise异步模式
- jQuery中的promise的应用
- 通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise
- 链式封装ajax请求的Promise
- Jquery promise
- 【Lua】Lua中的Table操作
- swift tutorial 2---你的第一个项目
- WPF中嵌入普通Win32程序的方法
- J2EE-BaseDao.java
- appium环境搭建总结
- jquery的promise处理嵌套请求
- 【Material Design视觉设计语言】UI组件设计(三):纸片
- Q_OBJECT宏的作用
- sql常用
- hdu1163 Eddy's digital Roots
- 随机选择算法
- git技巧
- Android SDK体系简析
- Socket使用大全