博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
主动中断请求
阅读量:6488 次
发布时间:2019-06-24

本文共 2123 字,大约阅读时间需要 7 分钟。

For 体验: 很多时候,请求后台接口比较慢,还在等待返回。如果此时用户选择了切换页面,这时候我们可以选择将还在进行中的请求主动中断。

jQuery

//可以在通用的入口abort()掉requestvar request = $.ajax({  type: 'POST',  url: 'someurl',  success: function(result){
}});request.abort();

Angular1.x

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); } }; }])

转载地址:http://xmouo.baihongyu.com/

你可能感兴趣的文章
Spring 源码解析系列
查看>>
Centos6.3下DRBD安装配置笔记
查看>>
数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
查看>>
对异常 java.lang.IllegalStateException: getAttribute: Session already invalidated的理解
查看>>
Linux程序管理:yum工具
查看>>
ios webp转换jpg
查看>>
[RabbitMQ]02_RabbitMQ学习之helloword(java)
查看>>
eas即时库存刷新异常处理
查看>>
catch,finally执行遇到return语句怎么办
查看>>
搭建MySQL-Cluster集群架构
查看>>
解决jq双重tab-多个选项卡嵌套关系 封装tab点击和hover事件
查看>>
keepalived原理
查看>>
CSRF攻击与防御(写得非常好)
查看>>
当windows 7系统中程序和功能无法卸载IE9,10,11时的方法
查看>>
清除Linux的无用日志
查看>>
设计模式之建造者模式(Builder)
查看>>
一些儿个人看法
查看>>
ThinkSNSPlus V1.9-V2.0升级指南
查看>>
ssh密钥修改工作记录20130608
查看>>
mysql数据库授权学习记录
查看>>