-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProcessQueue.js
More file actions
64 lines (54 loc) · 1.8 KB
/
Copy pathProcessQueue.js
File metadata and controls
64 lines (54 loc) · 1.8 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
const ProcessStatus = require('./ProcessStatus');
const Process = require('./Process');
class ProcessQueue {
constructor() {
this._status = ProcessStatus.INPROGRESS;
this._promise = new Promise(function (resolve, reject) {
this._resolve = resolve;
this._reject = reject;
}.bind(this));
this._processList = [];
this._resolvedCount = 0;
this._successCount = 0;
this._failureCount = 0;
this._successCallback = function() {
this._resolvedCount++;
this._successCount++;
if (this._resolvedCount == this._processList.length) {
if (this._failureCount == 0) {
this._status = ProcessStatus.SUCCESS;
this._resolve();
} else {
this._status = ProcessStatus.FAILED;
this._reject();
}
}
}.bind(this);
this._failureCallback = function() {
this._resolvedCount++;
this._failureCount++;
if (this._resolvedCount == this._processList.length) {
this._status = ProcessStatus.FAILED;
this._reject();
}
}.bind(this);
}
push(process) {
if (process instanceof Process || process instanceof ProcessQueue) {
process.then(this._successCallback, this._failureCallback);
} else {
throw new TypeError('Invalid process type pushed to the queue');
}
this._processList.push(process);
}
then(resolve, reject) {
return this._promise.then(resolve, reject);
}
catch(reject) {
return this._promise.catch(reject);
}
getStatus() {
return this._status;
}
}
module.exports = ProcessQueue;