axios请求可以等到收到响应吗?

Can axios request wait until the response is received?

我需要从外部来源获取 IP 地址和端口号详细信息。这些详细信息是提出一些其他请求所必需的。以下是我正在尝试的代码:

import axios from 'axios'

let ServerURL

axios.get('http://some/path')
  .then((response) => {
    ServerURL = 'http://' + response.data.server_ip_address + ':' + response.data.server_ip_port
  })
  .catch((error) => {
    console.log(error)
  })

const apiClient = axios.create({
  baseURL: ServerURL,
  headers: {
    Accept: 'application/json',
    'Content-Type': 'application/json'
  }
})

export default {
  getConfigInfo () {
    return apiClient.get('/config')
  }
}

我的问题是,在调用导出函数 getConfigInfo() 时,ServerURL 仍然未定义。

我该如何处理这种问题?非常感谢任何帮助。

是的,你可以:

import axios from 'axios'

let apiClient;

const getApiClient = async () => {
  if (apiClient) {
    return apiClient;
  }

  const {
    data: {
      server_ip_address: ipAdress,
      server_ip_port: ipPort,
    }
  } = await axios.get('http://some/path');

  const serverUrl = `http://${ipAddress}:${ipPort}`;

  apiClient = axios.create({
    baseURL: ServerURL,
    headers: {
      Accept: 'application/json',
      'Content-Type': 'application/json'
    }
  });
}

export default {
  async getConfigInfo() {
    const apiClient = await getApiClient();

    return apiClient.get('/config')
  }
}

使用的模式:singleton