主动中断请求
2016-11-02 23:40
204 查看
For 体验: 很多时候,请求后台接口比较慢,还在等待返回。如果此时用户选择了切换页面,这时候我们可以选择将还在进行中的请求主动中断。
$q
$http(config)
jQuery
参考//可以在通用的入口abort()掉request var request = $.ajax({ type: 'POST', url: 'someurl', success: function(result){} }); request.abort();
Angular1.x
$http$q
$http(config)
angular.module('app.services', []) // 发送中的请求 .factory('PendingRequests', [ function(){ var list = []; // 私有变量 return { push: function(canceller){ list.push(canceller); }, remove: function(canceller){ var index = _.indexOf(list, canceller); if (index > -1) { list.splice(index, 1); } }, clear: function(){ _.forEach(list, function(item){ item.resolve(); }); list = []; } }; } ]) // 请求包装 .factory('RequestWrapper', [ '$q', '$http', 'PendingRequests', function($q , $http , PendingRequests){ function wrapper(type, config, options){ // 自动中断的canceller var canceller; // 主动传入 `timeout` 不自动中断 if (!config.hasOwnProperty('timeout')) { canceller = $q.defer(); config.timeout = canceller.promise; } var req = $http(config); if (canceller) { PendingRequests.push(canceller); } var defer = $q.defer(); req.then(function(res){ var match = type === 'array' ? angular.isArray(res.data) : angular.isObject(res.data) && !angular.isArray(res.data); if (match) { defer.resolve(res.data); } else { res.TypeError = true; defer.reject(res); } }, function(res){ defer.reject(res); if (res.status === 0) { // 请求主动中断 return; } }); if (canceller) { // 请求已完成,从 pending 中移除 req['finally'](function(){ PendingRequests.remove(canceller); }); } return defer.promise; } // array 或 object 两种返回 return { array: function(req, options){ return wrapper('array', req, options); }, object: function(req, options){ return wrapper('object', req, options); } }; } ])
相关文章推荐
- linux设备驱动之pci设备的中断请求
- 6.3 x86处理器如何处理MSI-X中断请求
- 【中断异常】中断请求队列的初始化
- 利用主动对象模型设计并发同步请求
- 6.3 x86处理器如何处理MSI-X中断请求
- linux设备驱动的中断与并发请求事件
- 未决寄存器置1怎么区分是中断请求还是清中断
- 当你在Mac下载东西的时候,有时候因为网络或者其他问题中断了,双击重新下载会提示你“您所请求的资源没有权限”?
- Retrofit2+Rxjava2如何主动取消网络请求
- 6.2 PowerPC处理器如何处理MSI中断请求
- Linux内核-中断-中断向量表和中断请求队列的初始化
- ASP.NET Core 中断请求了解一下(翻译)
- [转] IE6中请求莫名中断
- 微信开发者-主动请求-实际开发-(5)验证TOKEN(C#)
- springMVC的请求方法中处理多个mybatis方法,到某个方法中断了:BindingException:has an unsupported return type
- IE6中ajax aborted错误请求中断解决方法
- 微信开发者-主动请求-实际开发-(4)自定义菜单(C#)
- 微信开发者-主动请求-实际开发-(3)获取access_token(C#)
- 解决jQuery ajax请求在IE6中莫名中断的问题
- 展讯8810平台:cy8c204_s3_cypress_3.95-2key调试(静态分配、中断请求、队列)