前言
先说结果: 结果是失败的, 在线编程限定30分钟。 而我实际作出来的时间慢了10分钟。
题目
设计的一个函数, 使其存入一个数组, 在函数内部执行先后执行数组的函数(异步的), 并把结果返回。
上代码:
const timeout = ms => new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, ms);
});
const ajax1 = () => timeout(2000).then(() => {
console.log('1');
return 1;
});
const ajax2 = () => timeout(1000).then(() => {
console.log('2');
return 2;
});
const ajax3 = () => timeout(2000).then(() => {
console.log('3');
return 3;
});
const mergePromise = ajaxArray => {
// 在这里实现你的代码
};
// mergePromise([ajax1, ajax2, ajax3])
mergePromise([ajax1, ajax2, ajax3]).then(data => {
console.log('done');
console.log(data); // data 为 [1, 2, 3]
});
// 分别输出
// 1
// 2
// 3
// done
// [1, 2, 3]
以上就是题目代码
我的结果
const mergePromise = ajaxArray => {
// 在这里实现你的代码
let result = []
let arr = ajaxArray || []
let i = arr.length
function cyc(arr, resolve){
if(arr.length === 0){
resolve(result)
return
}
arr.shift()().then( (data) => {
result.push(data)
cyc(arr ,resolve)
})
}
return new Promise((resolve, reject)=>{
cyc(arr, resolve)
})
};
结尾
总结一下: 第一点, 看到做题有时间限制, 所有有一定紧张感, 导致看题用了7分钟左右。第二点, 开始思路错误, 后面再写已经来不及了。最后 其实之前可以研究了promise, 并看了下源码, 但是还是不够熟练。
题外话
做这个题是在吃了下午饭做得, 当时对这个编程题一点概念都没有, 就随意点开了,结果 看见是一个编程题, 还限时,就懵逼了。