简单实现一个callback回调的包装器

要求

  • 不使用await
  • 不使用Promise
  • 要求并行指定一系列有callback的函数,并取到返回值

代码

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
function fetch1(cb) {
cb(1)
}

function fetch2(cb) {
cb(2)
}

function fetch3(cb) {
setTimeout(() => {
cb(3)
}, 10000);
}

function wrapFn(fns) {
return function(onCompleted) {
let flag1 = false;
let flag2 = false;

const flags = fns.map(() => false);
const res = fns.map(() => null);
const check = () => {
if(!flags.includes(false)) {
onCompleted(res);
}
}

fns.forEach((fn, i) => {
fn((ret) => {
flags[i] = true;
res[i] = ret;
check();
})
})
}
}


function main() {
// 测试代码
wrapFn([fetch1, fetch2, fetch3])((res) => {
console.log('全部执行完毕');
console.log('结果:', res);
})
}
main();
文章目录
  1. 1. 要求
  2. 2. 代码