如何从Promise.all和axios调用的PromiseResult中获取data数据
代码修正方案
你现有代码的问题很明确,按以下调整即可拿到目标data内容:
- 第一处问题:
Promise.all入参写法错误。你已经把请求Promise存入allPromises数组,不需要再给这个数组套一层外层数组,否则会多一层无意义的取值嵌套。 - 第二处问题:axios响应结构取值路径不对。axios封装的POST请求返回的响应对象本身带
data字段(存放后端返回的完整响应体),你截图中标注的业务data字段,是后端返回体里的子字段,完整取值路径是axios响应对象.data.data。
修正后完整代码
const promiseComment = axios.post(`${BASE_URL}/api/addComment/`, data, getDefaultHeaders()); const allPromises = [] allPromises.push(promiseComment) // 移除Promise.all入参外层多余的数组包裹 Promise.all(allPromises) .then(function (values) { // values按顺序存放所有并发请求的axios响应对象,第一个请求对应values[0] const targetData = values[0].data.data; console.log('提取到的目标data内容:', targetData); });
如果你暂时不想调整
Promise.all的入参,保留原有Promise.all([allPromises])写法的话,直接在then回调里取values[0][0].data.data也能拿到目标数据,但这种多余嵌套属于不规范写法,不建议长期保留。
后续新增并发请求时,只需要把对应请求的Promise对象push到allPromises数组,按索引从values中取对应响应,再走.data.data路径即可拿到对应接口的业务返回值。
内容的提问来源于stack exchange,提问作者Web World
相关产品推荐
相关产品推荐

