adapater 即为适配器。
该部分实际上是axios 中实现 http通信的核心模块。
8-1.内置适配器
axios 自带适配器,只有两种:
xhr浏览器端。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.request、wx.request、JSONP等等封装成 promise 化的形式,想要用 axios 的方式来使用这些通信手段,此时我们就需要封装自定义适配器。
封装自定义 adapter 有以下条件:
- 必须是一个函数。
- 函数形参是
config。(axios在调用adapter时,会将实际request config传入。) - 函数返回值是
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
})
}