#setDefaults
fn - createInstance
return
AxiosInstance
export interface AxiosInstance extends Axios {
<T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;
<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
defaults: Omit<AxiosDefaults, 'headers'> & {
headers: HeadersDefaults & {
[key: string]: AxiosHeaderValue
}
};
}
class - Axios
instance/props
- Axios.interceptors.request
- Axios.interceptors.response
prototype/fn - Axios.prototype.request
chain
axios中称之为middleware,类似于koa的中间件 Hook up interceptors middleware 用来链接所有的拦截器中间件
请求拦截器会通过数组的unshift方法进入chain 响应拦截器会通过数组的push方法进入chain
最终执行都会通过shift方法执行 因为执行的时候是通过Promise的链式调用,所以需要一个成功的回调和一个失败的回调 这里就巧妙的采用了一个undefined占位
requestInterceptors
responseInterceptors
dispatchRequest
扩展面试
call bind apply
-
三者区别
-
axios中为什么不直接使用bind 答:可能是那时候没有bind,或者说是为了兼容性?
如何拷贝一个对象的属性
数组方法
Promise相关
- Promise.resolve
编码方式
- 比特
- 字节
- 字符
- 字符集 逻辑上对字符的定义
- 字符编码 物理上对字符的实现
序列化、反序列化
- IDL interface description language
- 非IDL JSON、XML
二进制编码:使用0和1表示数据的编码方式,是计算机内部数据表示的基础。
十进制编码:使用0到9的十个数字表示数据的编码方式,常用于一般数值表示。
八进制编码:使用0到7的八个数字表示数据的编码方式,通常以前缀"0"表示,如075表示八进制的75。
十六进制编码:使用0到9和A到F的十六个字符表示数据的编码方式,通常以前缀"0x"表示,如0x1A表示十六进制的1A。
ASCII编码:用于表示文本字符的编码方式,将字符映射到7位二进制数字,包括标准ASCII和扩展ASCII。
Unicode编码:用于表示全球各种语言字符的编码方式,提供了更广泛的字符集,包括UTF-8、UTF-16和UTF-32等编码方式。
压缩编码:用于减小数据大小以节省存储空间或提高传输效率的编码方式,如Gzip、LZ77、Huffman编码等。
Base64编码:将二进制数据编码成可打印字符的编码方式,常用于在文本中嵌入二进制数据,如在电子邮件中嵌入图像。
URL编码:将特殊字符转换为%符号后跟两位十六进制数字的编码方式,用于在URL中传输数据。
声音编码:用于将声音信号编码成数字形式的编码方式,如MP3、AAC、WAV等。
图像编码:用于将图像数据编码成数字形式的编码方式,如JPEG、PNG、GIF等。
视频编码:用于将视频数据编码成数字形式的编码方式,如H.264、H.265、VP9等。
MIME types
A media type (also known as a Multipurpose Internet Mail Extensions or MIME type) indicates the nature and format of a document, file, or assortment of bytes. MIME types are defined and standardized in IETF's RFC 6838.
Internet Assigned Numbers Authority (IANA)
type/subtype
type
discrete type
- application
- audio
- example
- font
- image
- text
- video
multipart type
- message
- multipart
重要的web MIME type
- application/octet-stream
- text/plain
- text/css
- text/html
- text/javascript