javascript - 如何最佳地组合多个 axios 响应

标签 javascript reactjs axios

我正在使用 React 应用程序。我必须使用来自 3 个不同 API 的响应创建 2 个对象。例如:

  1. DataObject1 将使用 API1 和 API2 创建
  2. 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 dataObject2 = createDataObject2(responses[0], responses[1], responses[2]);
  // use/access the results 
})).catch(errors => {
  // react on errors.
})

axios.all([requestOne, requestTwo, requestThree]).then((response) => {
  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.
})

因为没有必要分散和休息。

如果您不想使用 responses[0]responses[1] 等,那么您可以使用:

axios.all([requestOne, requestTwo, requestThree]).then(axios.spread((response1, response2, response3) => {
  const dataObject1 = createDataObject1(response1, response2);
  const dataObject2 = createDataObject2(response1, response2,response3);
  // use/access the results 
})).catch(errors => {
  // react on errors.
})

关于javascript - 如何最佳地组合多个 axios 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61038630/

相关文章:

javascript - 为什么 forEach 和 map 在 jsx 中的行为不同?

javascript - Node.js 请求使用 "request"模块,但不使用 "axios"

javascript - 如何使用 underscore.js 编辑具有字符串键值对的对象数组中的字符串?

javascript - 渲染时不显示在 SVG 元素的 onload 事件中绘制的点

javascript - 提交表单后如何在屏幕上保留模式/ toast ?

javascript - 通过 Redux 和 Axios 在 GET API 请求上返回 Promise 对象

reactjs - react-testing-library 模拟 axios.create({}) 实例

javascript - 我试图通过按 Enter 键而不是提交来在输入字段中添加换行符

javascript - 使用 React 将 HTML 元素插入 DOM

javascript - 如何更改 <input/> 的占位符颜色?