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

如何将多个DeveloperInterface实例code方法的Promise结果拼接为单字符串?

问题

函数getDev接收DeveloperInterface类型的实例数组,每个实例的code方法返回Promise<String>。需求是调用每个实例的code方法,将所有返回结果拼接成单个字符串后返回。目前能输出每个code方法的单独结果,但无法完成拼接,相关代码如下:

async function getDev(developers: Array<DeveloperInterface>) {
    try {
        var newString: string = "";
        developers.map((developer: any) => {
            developer.code().then((result: any) => {
                return new Promise(function(resolve) {
                    resolve(newString.concat(result));
                });
            });
        })
        console.log(newString);
    } catch (error) {
        return "Error";
    }
}

解决思路

  • 原代码核心问题:一是未等待异步操作完成,map内的异步回调会在console.log(newString)执行后才触发,此时newString还是初始空值;二是concat返回新字符串,不会修改原newString,所以即使回调执行了也无法更新变量。
  • 正确实现步骤:
    1. 收集所有developer.code()返回的Promise,形成Promise数组;
    2. 用await Promise.all()等待所有Promise完成,拿到所有异步结果组成的数组;
    3. 用数组join('')方法拼接所有结果为单个字符串;
    4. 在async函数内必须用await才能获取异步操作的结果,否则无法拿到正确值。

修正后的代码

async function getDev(developers: Array<DeveloperInterface>) {
    try {
        // 收集所有code方法的Promise实例
        const promiseList = developers.map(developer => developer.code());
        // 等待所有异步任务完成,获取结果数组
        const codeResults = await Promise.all(promiseList);
        // 拼接所有结果字符串
        const finalString = codeResults.join('');
        
        console.log(finalString);
        return finalString;
    } catch (error) {
        console.error('执行出错:', error);
        return "Error";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:20:28