为何Promise.all返回匿名函数数组?API调用Promise问题排查
问题排查:Promise.all返回函数数组而非预期数据数组
错误原因
你传入Promise.all的是两个异步函数(promise1和promise2),而不是函数执行后返回的Promise实例。Promise.all会直接把数组里的函数对象当作结果返回,所以控制台输出的是两个匿名函数。
修复方案
1. 正确传入Promise实例
在Promise.all中执行这两个函数,传入它们返回的Promise:
const allPromises = async () => { try { const result = await Promise.all([promise1(), promise2()]); console.log(result); return result; } catch (e) { console.error('请求出错:', e); throw e; // 不要吞掉错误,让上层可以捕获 } };
2. 优化异步函数写法
promise1和promise2里的.then可以用await简化,避免嵌套:
const promise1 = useCallback(async () => { try { const datax = await userFollowers(link); dispatch({ type: 'GET_FOLLOWING', payload: datax, }); return datax; } catch (e) { console.error('获取关注列表失败:', e); throw e; // 抛出错误,让Promise.all可以捕获 } }, [item, link, dispatch]); // 补全依赖项,确保变量更新时函数能重新生成 const promise2 = useCallback(async () => { try { const datax = await userFollowing(link2); dispatch({ type: 'GET_FOLLOWERS', payload: datax, }); return datax; } catch (e) { console.error('获取粉丝列表失败:', e); throw e; } }, [item, link2, dispatch]);
额外注意点
useCallback的依赖数组要包含所有用到的变量(比如link、link2、dispatch),否则会因闭包捕获旧值导致数据不一致。- 不要在
catch里直接返回错误,应该抛出错误,保证Promise.all能正确捕获异常,避免错误被静默吞掉。
内容的提问来源于stack exchange,提问作者salmanaacvf
相关产品推荐
相关产品推荐

