如何正确使用Promise发送POST请求?请求耗时过长问题排查
问题分析与代码修正
代码里的核心问题
- 冗余Promise嵌套:
async函数本身就会返回Promise,没必要再外层包裹new Promise,徒增复杂度还容易出问题。 - 强制5秒延迟:代码里的
setTimeout直接让请求等待5秒才执行,这是耗时过长的直接原因,除非业务必须延迟,否则必须移除。 - 无效逻辑:
return await axios(config)之后的console.log(result)和resolve(result)永远不会执行,而且result是空对象,完全没用。 - 手动设置请求头风险:axios可以自动处理FormData的
Content-Type(包括boundary)和Content-Length,手动计算长度很容易出错,可能导致请求异常。 - 无错误处理:没捕获axios请求的异常,一旦请求失败,Promise会一直处于pending状态,无法处理错误。
修正后的代码
exports.updatePostApi = async (datas) => { const api = "user/update?_method=PUT"; const data = new FormData(); data.append("userbody", JSON.stringify(datas)); // 可选:保留长度日志,但无需手动设置到请求头 console.log(data._valueLength + data._overheadLength + 56, "length"); const config = { method: "post", baseURL: apiEndpoint, url: api, data: data, headers: { "BIR-Authorization": Authorization, // 移除手动设置的Content-Type和Content-Length,交给axios自动处理 }, maxBodyLength: Infinity, maxContentLength: Infinity, }; try { const result = await axios(config); console.log(result); return result; } catch (error) { console.error("请求失败:", error); throw error; } };
修正说明
- 去掉了多余的Promise嵌套和
setTimeout延迟,直接在async函数内处理逻辑,消除了无意义的等待时间。 - 让axios自动处理FormData的请求头,避免手动计算长度带来的错误。
- 添加
try/catch捕获请求异常,确保错误能被调用方捕获处理。 - 直接返回axios的响应结果,
async函数会自动将其包装为resolved状态的Promise,无需手动调用resolve。
内容的提问来源于stack exchange,提问作者denise
相关产品推荐
相关产品推荐

