要求
- 不使用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();
|