You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:41:42