# adapter 适配器函数实现

本章节,我们将会实现adapter适配器

# 代码

我们先来看一下代码的实现,代码在wx-axios/lib/defaults.js,第 6 行

function getDefaultAdapter(config) {
  let adapter;
  const method = config.method;
  if (!methods.includes(method)) {
    throw new Error(`不支持 ${method} 请求`);
  }
  if (method === "upload") {
    adapter = uploadAdapter;
  } else if (method === "download") {
    adapter = downloadAdapter;
  } else {
    adapter = requestAdapter;
  }
  return adapter;
}

const defaults = {
  adapter: getDefaultAdapter,
};

# 分析

首先我们的适配器是需要每次请求的时候都执行一次,动态获取到不同的请求处理函数。与axios不同的是,axios在一开始的时候就执行了getDefaultAdapter函数,并不是在每次请求的时候执行,它根据环境获取到了对应的请求处理函数。

在微信小程序中,我们无需根据环境去获取请求处理函数,而是根据请求方法获取不同的请求处理函数,因为我们的WxAxios是对wx.requestwx.uploadFilewx.downloadFile进行封装的,不同的请求方法对应着使用不同的底层 API。其中upload请求方法使用的是wx.uploadFileAPI,download请求方法使用的是wx.downloadFileAPI,其他请求方法使用的是wx.requestAPI

# 总结

adapter适配器是在每次请求的时候根据method字段获取不同的请求处理函数,所以adapter是一个函数,函数执行的结果就是返回对应的请求处理函数(因为axios在一开始的时候就执行了getDefaultAdapter,所以adapter其实就是对应的请求处理函数)。