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

如何在Express.js+TypeScript中将循环内Promise结果赋值给外部变量?

问题分析与解决方案

原代码的核心问题是:forEach循环中调用异步函数describeSObject时,不会等待Promise完成就直接执行后续的return response.status(200).json(sObjectsDetails),此时sObjectsDetails还是空数组——因为then里的push操作是异步触发的,还没来得及执行。

修正后的代码

export const getSObjectFields = async (request: Request, response: Response) => {
  if (!request.body) { 
    return response.status(401).json({ error: 'No SObject Selected' }); 
  }

  const selectedSObject = request.body;
  // 用map收集所有Promise,替代forEach
  const promiseList = selectedSObject.map((element: string) => 
    describeSObject(request, response, element)
      .catch(err => {
        console.error(`Error describing ${element}: `, err);
        // 可选:如果希望单个失败不影响整体,这里可以返回null或错误对象,后续过滤
        return null;
      })
  );

  // 等待所有Promise完成
  const sObjectsDetails = await Promise.all(promiseList);
  
  // 可选:过滤掉失败的结果(如果上面catch返回了null)
  const validResults = sObjectsDetails.filter(result => result !== null);
  
  return response.status(200).json(validResults);
};

关键修正点

  • 用map替代forEach:map会返回包含所有Promise的数组,方便后续用Promise.all统一处理
  • await Promise.all等待所有异步操作:确保所有describeSObject的结果都返回后,再组装响应
  • 错误处理优化:在每个Promise的catch中单独记录错误,可选控制单个失败是否影响整体响应(比如返回null后过滤,或者直接让Promise.all抛出错误)

如果希望严格处理,只要有一个describeSObject失败就返回错误,可以去掉单个Promise的catch,改用外层try/catch:

export const getSObjectFields = async (request: Request, response: Response) => {
  try {
    if (!request.body) { 
      return response.status(401).json({ error: 'No SObject Selected' }); 
    }

    const selectedSObject = request.body;
    const promiseList = selectedSObject.map((element: string) => 
      describeSObject(request, response, element)
    );

    const sObjectsDetails = await Promise.all(promiseList);
    return response.status(200).json(sObjectsDetails);
  } catch (err) {
    console.error('Error describing SObjects: ', err);
    return response.status(500).json({ error: 'Failed to fetch SObject details' });
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:45:45