forked from southpolesteve/node-abort-controller
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
51 lines (46 loc) · 1.09 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const { EventEmitter } = require('events')
class AbortSignal {
constructor() {
this.eventEmitter = new EventEmitter()
this.onabort = null
this.aborted = false
}
toString() {
return '[object AbortSignal]'
}
get [Symbol.toStringTag]() {
return 'AbortSignal'
}
removeEventListener(name, handler) {
this.eventEmitter.removeListener(name, handler)
}
addEventListener(name, handler) {
this.eventEmitter.on(name, handler)
}
dispatchEvent(type) {
const event = { type, target: this }
const handlerName = `on${type}`;
if (typeof this[handlerName] === 'function')
this[handlerName](event)
this.eventEmitter.emit(type, event)
}
}
class AbortController {
constructor() {
this.signal = new AbortSignal()
}
abort() {
if (this.signal.aborted)
return
this.signal.aborted = true
this.signal.dispatchEvent('abort')
}
toString() {
return '[object AbortController]'
}
get [Symbol.toStringTag]() {
return 'AbortController'
}
}
module.exports = AbortController
module.exports.default = AbortController