Skip to content

adapater 即为适配器

该部分实际上是axios 中实现 http通信的核心模块。

8-1.内置适配器

axios 自带适配器,只有两种:

  1. xhr 浏览器端。
  2. http 服务端。

axios 会根据实际环境,自动调用内置的对应适配器。

当然,也可以手动设置(意义不大):

js
const config = {
  url: '/api',
  // ①浏览器端设置xhr
  adapter: 'xhr',
  // ②服务端设置http
  adapter: 'http',
  // ③也可以以数组形式传递,让axios判断环境进而加载
  adapter: ['xhr', 'http']
}

axios(config)

8-2.自定义适配器

axios 的内置适配器中:

  • xhr 适配器实现了 XMLHttpRequest 基础通信。
  • http 适配器实现了 Http 模块通信。

当实际开发中,我们想要将某一通信方式 taro.requestwx.requestJSONP等等封装成 promise 化的形式,想要用 axios 的方式来使用这些通信手段,此时我们就需要封装自定义适配器。

封装自定义 adapter 有以下条件:

  1. 必须是一个函数。
  2. 函数形参是 config。(axios 在调用 adapter 时,会将实际 request config 传入。)
  3. 函数返回值是 Promise 实例。

基本格式如下:

js
// settle函数是对于resolve和reject做出处理的具体函数
import settle from './core/settle'

export const adapter = function (config) {
  // At this point:
  //  - config has been merged with defaults
  //  - request interceptors have already run
  //  - request transformers have already run

  return new Promise((resolve, reject) => {
    // Send a request, do something...
    const  response = {
      data: responseData,
      status: request.status,
      statusText: request.statusText,
      headers: responseHeaders,
      config: config,
      request: request
    }

    settle(resolve, reject, response)

    // From here:
    //  - response transformers will run
    //  - response interceptors will run
  })
}