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

await未生效:调用getAllData后res.send提前返回问题求助

问题分析与解决

你的核心问题是**getAllData函数虽标记为async,但内部用了回调式的request.get且未返回Promise**,导致外层的await getAllData()无法等待异步操作完成,直接跳过执行res.send(req),所以响应会提前发送。

解决步骤

将request.get的回调逻辑封装为Promise,让getAllData能真正被await等待:

修改后的代码

1. 重构getAllData函数

let _partnerToken;
async function getAllData(dealerId, id) {
  return new Promise((resolve, reject) => {
    const options = {
      method: 'GET',
      url: `${_url}/${dealerId}`
    };

    request.get(options, async (error, response) => {
      if (error) {
        reject(error);
        return;
      }

      try {
        const partnerToken = response.body.slice(17, -2);
        await getCarData(partnerToken, id);
        await getCarImages(partnerToken, id);
        _partnerToken = partnerToken;
        resolve();
      } catch (err) {
        reject(err);
      }
    });
  });
}

2. 调整POST请求处理

app.post('/api/urlData', async function(req, res) {
  try {
    await getAllData(req.body.dealerId, req.body.vin);
    res.send(req);
  } catch (err) {
    res.status(500).send({ error: err.message });
  }
});

关键说明

  • 用new Promise()包裹request.get,通过resolve()和reject()控制异步流程的完成状态
  • 原回调内的await操作放入try/catch,捕获getCarData/getCarImages的错误并通过reject()抛出,交由外层处理
  • 外层POST请求添加try/catch,避免异步错误导致服务器未处理异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:48:20