【问题标题】:How can I isolate and extract common axios calls to prevent code duplication?如何隔离和提取常见的 axios 调用以防止代码重复?
【发布时间】:2018-12-25 12:15:02
【问题描述】:

我正在尝试将一堆 axios 调用移动到一个单独的实用程序文件,以便我可以共享它们并避免到处重写相同或相似的 axios 调用。

但是,我不知道如何做到这一点,并且仍然利用调用的 thencatch 部分,我在其中执行独特的操作,例如更新状态和/或变量。

这是我使用的一个 axios 调用,我的应用程序中对此有类似的变化:

axios({
  method: "post",
  url: `/api/PlanetTime/Battle/${this.props.levelId}/files/upload`,
  data: bodyFormData,
  config: {
    headers: { "Content-Type": "multipart/form-data" }
  }
})
  .then(response => {
    let newFile = response.data[response.data.length - 1];
    this.props.onUploadEnd(response.data);
    this.setState({
      selectedFile: null,
      file: null
    });
  })
  .catch(response => {
    console.log("upload error!");
  });

那么有没有办法进行这样的 axios 调用,但让它更通用,以便我可以接受不同的 url、数据等,并且仍然可以利用调用的 then 部分?

【问题讨论】:

    标签: javascript ecmascript-6 promise axios


    【解决方案1】:

    您可以返回axios 电话。返回 axios 调用(内部调用 axios.request 并返回一个承诺)将允许可链接性:

    function createRequest(url, data) {
      return axios({
        // Set up axios instance config
      });
    }
    

    然后,当你需要它时,导入它:

    createRequest('…', { … })
      .then(response => { … })
      .catch(error => { … });
    

    【讨论】:

    • 哦,我明白了,所以“then”和“catch”部分可以在任何需要它们的组件中?而且它们的行为方式与我将它们直接附加到 axios 调用一样吗?
    • @SkyeBoniwell 是的,因为您从 createRequest 返回了相同的承诺。
    • 我可以拥有它以便我可以在一个组件中多次使用它吗?比如 const uploadShipPhoto = createRequest({...}) 然后 uploadWeaponPhoto = createRequest({...}) ... 等等...
    • @SkyeBoniwell 当然。每次调用 createRequest 时,您都会单独调用 axios
    • 可以通过执行以下操作使其看起来更像 es6:export const createRequest = (url, data) => { axis({...}) } 吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2023-04-07
    相关资源
    最近更新 更多