1、需求
有两个异步回调函数分别返回各自的数组,要把2个数组拼接为1个
例如:
// 异步函数 getResult
const getResult = async (value) => {
try {
const res = await getResultList(value); // 假设 getResultList 返回一个Promise,解决后得到一个数组
return res;
} catch (error) {
return []; // 如果出错,返回一个空数组
}
};
// 异步函数 getPoint
const getPoint = async (value) => {
try {
const res = await getPointList(value);
return res;
} catch (error) {
return [];
}
};
2、解决
在哪个时机获取返回值呢?最佳方式就是使用promise
// 使用 Promise.all 来等待两个异步函数完成,并拼接它们的返回数组
async function getCombinedResult(value) {
try {
// 同时调用 getResult 和 getPoint,并等待它们的结果
const resultArray = await Promise.all([getResult(value), getPoint(value)]);
const combinedArray = [].concat(...resultArray);
return combinedArray;
} catch (error) {
// 如果任何一个Promise失败,这里会捕获到错误
console.error('An error occurred:', error);
return [];
}
}
// 使用 getCombinedResult 函数
getCombinedResult('someValue').then(combinedResult => {
console.log(combinedResult); // 输出拼接后的数组
}).catch(error => {
console.error('Error fetching combined result:', error);
});
3、总结拓展
总结:平时学习知识点时,知道异步解决方案Promise,出现“提笔忘字”的情况,还是因为没有熟练掌握,可以多刷LeetCode题库,同时工作时多思考多复盘
回顾promise相关知识点
① 什么是promise?
一种异步解决方案,用来解决回调地狱(也叫回调金字塔)
其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。
② 什么是回调地狱?
回调函数中嵌套回调函数,可读性差,不好维护
//回调地狱案例
asyncFunc1(function(result1) {
asyncFunc2(result1, function(result2) {
asyncFunc3(result2, function(result3) {
// ...
});
});
});
用promise.all就能很好的解决上述问题