日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

主动中断请求

發布時間:2024/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主动中断请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

For 體驗: 很多時候,請求后臺接口比較慢,還在等待返回。如果此時用戶選擇了切換頁面,這時候我們可以選擇將還在進行中的請求主動中斷。

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){// 自動中斷的cancellervar 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);}};} ])

總結

以上是生活随笔為你收集整理的主动中断请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。