-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontext.js
More file actions
40 lines (36 loc) · 802 Bytes
/
context.js
File metadata and controls
40 lines (36 loc) · 802 Bytes
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
const GRACEFULL_CLOSE_TIMEOUT = 2000
class Context {
constructor (namespace, initialAsyncId) {
this.store = new Map()
this.asyncIds = new Set([initialAsyncId])
this._namespace = namespace
}
/**
* Close context and flush content
* @param {Boolean} force
*/
close (force = false) {
if (force) {
this._flush()
} else {
setTimeout(() => {
this._flush()
}, GRACEFULL_CLOSE_TIMEOUT)
}
}
/**
* Private: flush context and free memory allocation
*/
_flush () {
this.store.clear()
if (this._namespace._currentContext === this) {
this._namespace._currentContext = null
}
this.asyncIds.forEach((asyncId) => {
this._namespace.contextsByAsyncId.delete(asyncId)
})
}
}
module.exports = {
Context
}