xe-ajax
Version:
异步请求函数,用于浏览器和 node.js 的 HTTP 客户端
55 lines (48 loc) • 1.25 kB
JavaScript
var utils = require('../core/utils')
var XEAbortSignal = require('./abortSignal')
var requestList = []
function getSignalIndex (item) {
for (var index = 0, len = requestList.length; index < len; index++) {
if (item === requestList[index][0]) {
return index
}
}
return -1
}
/**
* 取消控制器
*
* @param {XERequest} request XERequest 对象
*/
XEAbortSignal.prototype.install = function (request) {
var reqSignal = request.signal
if (reqSignal) {
var index = getSignalIndex(reqSignal)
if (index > -1) {
requestList[index][1].push(request)
} else {
requestList.push([reqSignal, [request]])
}
}
}
function XEAbortController () {
this.signal = new XEAbortSignal()
}
XEAbortController.prototype.abort = function () {
var index = getSignalIndex(this.signal)
if (index > -1) {
var requestItem = requestList[index]
utils.arrayEach(requestItem[1], function (request) {
var item = requestItem[0]
request.abort()
if (utils.IS_DP) {
item._store.aborted = true
} else {
item.aborted = true
}
})
requestList.splice(index, 1)
}
}
module.exports = XEAbortController