-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.ts
More file actions
58 lines (47 loc) · 1.63 KB
/
Copy pathexample.ts
File metadata and controls
58 lines (47 loc) · 1.63 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
import JsObservableQueue from './lib';
const { BaseTask, TaskQueue } = JsObservableQueue;
const TASK_EXEC_TIME = 1000;
const AFTER_EACH_DELAY_TIME = 500;
class MyTask extends BaseTask<string> {
executor = () => {
const reversedId = (this.id as string).split('').reverse().join('');
return new Promise<string>((resolve) => {
setTimeout(() => resolve('Result: ' + reversedId), TASK_EXEC_TIME);
});
};
}
async function main() {
const queue = new TaskQueue();
queue.addTask(new MyTask({ id: 'lyohaplotinka' }, false));
queue.addTask(new MyTask({}, true));
queue.addTask(new MyTask({}, true));
queue.addTask(new MyTask({ id: 'js-queue' }));
queue.addTask(new MyTask({}, true));
queue.addTask(new MyTask({}, true));
queue.addTask(new MyTask({}, true));
queue.addTask(new MyTask({}, true));
queue.beforeAll((queue1) => {
console.log(':: Total tasks:', queue1.tasksCount);
});
queue.beforeEach((queueElement) => {
console.log('\nStarting task:', queueElement.id);
});
queue.afterEach((queueElement) => {
console.log('Finished task:', queueElement.id, ':: Value:', queueElement.executionResult);
return new Promise((resolve) => {
setTimeout(() => resolve(), AFTER_EACH_DELAY_TIME);
});
});
queue.afterAll(() => {
console.log(':: No more elements in queue!\n');
});
queue.run();
queue.tasksFinishedPromise.then(() => console.log(':: Queue stopped'));
setTimeout(() => {
queue.addTask(new MyTask({}, true));
setTimeout(() => {
queue.stop();
}, TASK_EXEC_TIME * 1.2 + AFTER_EACH_DELAY_TIME * 1.2);
}, TASK_EXEC_TIME * 10 + AFTER_EACH_DELAY_TIME * 10);
}
main();