/**
- @ 实现类似 promise all 顺序执行
- async await 化异步为同步编程
- getResult 函数返回 new Promise */
基本实现
const getResult = (arr) => {
let res = []
return new Promise(async (resolve, reject) => {
for (let fn of arr) {
res.push(await fn());
res.length == arr.length ? resolve(res) : '';
}
})
}
示例代码
const fun1 = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1)
}, 1000);
})
}
const fun2 = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2)
}, 3000);
})
}
const fun3 = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3)
}, 500)
})
}
const fun4 = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(4)
}, 2000)
})
}
let data = getResult([fun1, fun2, fun3, fun4]).then(data => {
console.log(data);
})
由于处理函数直接push 操作结果没有进行异常处理;所以进行reject 返回会报异常错误;此时处理一下
const getResult = (arr) => {
let result = []
return new Promise(async (resolve, reject) => {
for (let fn of arr) {
await fn().then(res => {
result.push(res);
}).catch(err => {
result.push({fn,msg:err});
})
result.length == arr.length ? resolve(result) : '';
}
});
}
由于返回的是promise对象,所以需要对其进行 catch 异常处理