如何动态创建带返回值的多函数并并行运行?(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
相关产品推荐
相关产品推荐

