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
})
}