javascript - 如何优化组合多个 axios 响应
问题描述
我正在使用 React 应用程序。我必须使用来自 3 个不同 API 的响应创建 2 个对象。例如:
- DataObject1 将使用 API1 和 API2 创建
- DataObject2 将使用 API1、API2 和 API3 创建
因此,我正在考虑通过确保 1 只调用每个 API 一次来执行此操作的最佳方式。
我在想这个:
const requestOne = axios.get(API1);
const requestTwo = axios.get(API2);
const requestThree = axios.get(API3);
axios.all([requestOne, requestTwo, requestThree]).then(axios.spread((...responses) => {
const dataObject1 = createDataObject1(responses[0], responses[1]);
const dataObject2 = createDataObject2(responses[0], responses[1], responses[2]);
// use/access the results
})).catch(errors => {
// react on errors.
})
const createDataObject1 = (response1, response2) => { //Combine required data and return dataObject1 }
const createDataObject2 = (response1, response2, response3) => { //Combine required data and return dataObject2 }
有没有更好的方法来做到这一点?
解决方案
看起来不错。
你可以改变这个
axios.all([requestOne, requestTwo, requestThree]).then(axios.spread((...responses) => {
const dataObject1 = createDataObject1(responses[0], responses[1]);
const dataObject 2 = createDataObject2(responses[0], responses[1], responses[2]);
// use/access the results
})).catch(errors => {
// react on errors.
})
到
axios.all([requestOne, requestTwo, requestThree]).then(axios(response) => {
const dataObject1 = createDataObject1(responses[0], responses[1]);
const dataObject 2 = createDataObject2(responses[0], responses[1], responses[2]);
// use/access the results
}).catch(errors => {
// react on errors.
})
因为传播和休息是多余的。
如果您不想像 , 等那样使用它们responses[0]
,responses[1]
那么您可以使用:
axios.all([requestOne, requestTwo, requestThree]).then(axios.spread((response1, response2, response3) => {
const dataObject1 = createDataObject1(response1, response2);
const dataObject 2 = createDataObject2(response1, response2,response3);
// use/access the results
})).catch(errors => {
// react on errors.
})
推荐阅读
- html - 为什么 css nth-child 选择器不起作用?
- sql-server - 有没有办法将函数放入过程中,然后将过程的输出输入到表中?
- ios - iOS 内购沙盒模式测试逻辑
- java - 如何在后端弹簧启动代码中获取按钮点击计数(我在 UI 中有)?
- sql - 如何在拼接机中获得工作台尺寸?
- angularjs - Angularjs基于其他元素添加和删除自定义指令验证
- html - 在 Roku 上显示 HTML5 或 HTML 内容
- python - 从包含多个 URL 的行中提取一个 URL
- java - 从 Docker 容器将 Log4j2 日志写入远程服务器会出错
- mysql - 如何从 value1 和 value2 字段忽略 value2 字段的表中获取 value1 的最大值