-
Notifications
You must be signed in to change notification settings - Fork 63
Expand file tree
/
Copy pathmiddleware-Task.js
More file actions
65 lines (60 loc) · 1.39 KB
/
Copy pathmiddleware-Task.js
File metadata and controls
65 lines (60 loc) · 1.39 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
65
/*
let task1 = function (next) {
setTimeout(() => {
console.log(1);
next();
}, 1000);
};
let tast2 = function (next, num) {
setTimeout(() => {
console.log(num);
next();
}, 3000);
};
let task = new Task();
task.add(task1).add(tast2, null, 2);
task.run();
// 其中 next 表示执行下一个方法
// 一秒后输出1,再过三秒后输出2
*/
const delay = timeout => new Promise((resolve, reject) => setTimeout(resolve, timeout));
class Task {
constructor() {
this.queue = [];
}
add(fn, context, ...args) {
this.queue.push((next = () => {}) => fn.bind(context, next, ...args));
return this;
}
stop(time) {
this.queue.push((next = () => {}) => () => {
console.log(`现在暂停${time}`);
setTimeout(next, time);
})
return this;
}
run(fn) {
const compose = arr => arr.reduce((pre, cur) => (...args) => pre(cur(...args)));
const task = compose(this.queue)(fn);
task();
}
}
let task1 = function (next) {
console.log('task1')
setTimeout(() => {
console.log(1);
next();
}, 1000);
};
let tast2 = function (next, num) {
console.log('tast2')
setTimeout(() => {
console.log(num);
next();
}, 3000);
};
let task = new Task();
task.add(task1).stop(2000).add(tast2, null, 2);
task.run(() => {
console.log('done');
});