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
相关产品推荐
相关产品推荐

