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

如何动态创建带返回值的多函数并并行运行?(TS报错解决)

解决TS2345错误:动态创建异步函数并并行执行

错误根源

你定义的listOfFunctions是**(data: string) => Promise<string>类型的函数数组**,但实际push的是func(outline[i])——这是调用函数后返回的Promise<string>,两者类型完全不匹配,导致TypeScript抛出TS2345错误。

两种正确实现方式

方式一:直接收集Promise(最简洁)

既然目标是并行执行异步逻辑,不需要先存储函数,直接将每个函数调用后的Promise存入数组,再用Promise.all等待所有结果:

private async runParallel() {
    let listOfPromises: Promise<string>[] = [];
    const outline: string[] = ["test1", "test2", "test3"];

    for (const input of outline) {
        const asyncFunc = async (input: string): Promise<string> => {
            // 这里编写你的异步逻辑,比如:
            // await fetchSomeData(input);
            return input;
        };
        // 将调用异步函数后的Promise加入数组
        listOfPromises.push(asyncFunc(input));
    }

    const data = await Promise.all(listOfPromises);
    console.log(data); // 输出 ["test1", "test2", "test3"]
}

方式二:先存储绑定参数的函数(如需复用函数)

如果需要先存储绑定好输入参数的函数,再统一执行,需要将函数改为无参异步函数,避免类型不匹配:

private async runParallel() {
    // 定义为无参异步函数数组
    let listOfFunctions: (() => Promise<string>)[] = [];
    const outline: string[] = ["test1", "test2", "test3"];

    for (const input of outline) {
        // 包装成无参函数,捕获当前循环的input值
        const boundFunc = async (): Promise<string> => {
            // 异步逻辑
            return input;
        };
        listOfFunctions.push(boundFunc);
    }

    // 统一调用所有函数,生成Promise数组后等待结果
    const data = await Promise.all(listOfFunctions.map(func => func()));
    console.log(data);
}

内容的提问来源于stack exchange,提问作者laprof

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:23:24