/
parallel.js
68 lines (58 loc) · 1.4 KB
/
parallel.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
'use strict';
// !-- FOR TESTS
let wrapper = function (options) {
// --!
// =====================================================
// <EXAMPLE>
let Beelzebub = require('../../');
let bz = Beelzebub(options || { verbose: true });
class MyTasks extends Beelzebub.Tasks {
_delay (message, delay = 300) {
return new Promise((resolve, reject) => {
setTimeout(() => {
this.logger.log(message);
resolve();
}, delay);
});
}
task1 () {
this.logger.log('MyTasks task1');
return this.$parallel('.task3', '.task4');
}
task2 () {
return this._delay('MyTasks task2', 200);
}
task3 () {
this.logger.log('MyTasks task3');
return this.$run(['.task5', '.task6']);
}
task4 () {
return this._delay('MyTasks task4', 400);
}
task5 () {
this.logger.log('MyTasks task5');
}
task6 () {
return this._delay('MyTasks task6', 600);
}
}
bz.add(MyTasks);
// arrays are run in parallel
let p = bz.run(['MyTasks.task1', 'MyTasks.task2']);
/* Output:
MyTasks task1
MyTasks task3
MyTasks task5
MyTasks task2
MyTasks task4
MyTasks task6
*/
// </EXAMPLE>
// =====================================================
// !-- FOR TESTS
return p.then(() => { return bz; });
};
module.exports = wrapper;
// if not running in test, then run wrapper
if (typeof global.it !== 'function') wrapper();
// --!