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

如何让TypeScript的mySecondFunction等待Promise.all完成后返回?

问题解决:让异步函数等待Promise完成后再返回

首先明确核心问题:mySecondFunction是同步函数,但内部包含异步的Promise操作,同步函数不会等待异步代码执行完成就直接返回初始值""。另外先提个笔误:你的myFirstMethod里调用的是mySecondMethod,但实际定义的函数名是mySecondFunction,这会导致编译错误,下面代码里我统一将函数名修正为mySecondMethod。

具体修改方案

把涉及异步操作的函数全部改为异步函数,用await替代.then()回调,确保代码等待异步任务完成后再执行后续逻辑:

export class MyHandler {
    entry = async (data: string[]): Promise<Map<string, string>> => {
        const response: Map<string, string> = new Map();
        // 用await等待所有API调用完成,直接拿到结果
        const results = await Promise.all(
            data.map(async (item) => {
                const apiGetDataRequest = {
                    data: item
                };
                const apiGetDataResponse = await this.client.apiCall(apiGetDataRequest);
                return apiGetDataResponse.data;
            })
        );
        // 等待myFirstMethod的异步结果,再填充Map
        for (const result of results) {
            const value = await this.myFirstMethod([1, 2, 3]);
            response.set(result, value);
        }

        return response;
    };

    // 改为async函数,返回Promise<string>,等待mySecondMethod的结果
    myFirstMethod = async (items: number[]): Promise<string> => {
        const result = await this.mySecondMethod(items);
        console.log(result);
        return result;
    };

    // 修正函数名,改为async函数,用await等待所有API调用完成
    mySecondMethod = async (items: number[]): Promise<string> => {
        const results = await Promise.all(
            items.map(async (item) => {
                const apiCallRequest = {
                    data: item
                };
                const apiCallResponse = await this.client.apiCall(apiCallRequest);
                return apiCallResponse.data;
            })
        );
        // 拼接结果,去掉开头多余的逗号
        let finalResult = "";
        for (const result of results) {
            finalResult = finalResult + ', ' + result;
        }
        return finalResult.replace(/^, /, '');
    };
}

关键修改说明

  1. 异步函数标记:所有使用await的函数必须添加async关键字,返回值会自动包装为Promise类型。
  2. 替换.then()为await:避免回调嵌套,同时确保代码按顺序执行,等待异步任务完成后再处理结果。
  3. 修正entry方法逻辑:原代码中response会在Promise.all完成前被返回,导致返回空Map,现在用await等待结果后再填充Map。
  4. 结果优化:拼接字符串后去掉开头的, ,避免返回的字符串以逗号开头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:39:23