/ javaScript

axios - 9 - 暴露的函数

console.info

该系类文章旨在研究 axios 的实现 。在研究源码的基础上,去理解 axios 是如何实现 ajax 请求并更好的去使用这个库。

简介

对应文件为 lib/axios.js

终于写到了最后,这个文件主要是对外暴露的 axios 方法,主要内容包括实例化 Axios 对象,并在此方法下绑定一些公用的方法。

代码分析

实例化 Axios 对象

对应代码为:

function createInstance(defaultConfig) {
    var context = new Axios(defaultConfig);
    
    // 绑定 request 函数的执行上下文后,取出函数
    var instance = bind(Axios.prototype.request, context);
    
    // 将 Axios 类下的方法绑定到 instance 对象上
    // extend 函数的第三个参数为方法执行的上下文环境
    utils.extend(instance, Axios.prototype, context);

    // 将实例化出来的 context 对象下的属性绑定到 instance 上
    utils.extend(instance, context);

    // 返回
    // 这样就能直接调用 request 函数
    // 并且该函数拥有 Axios 实例对象的所有内容
    return instance;
}

var axios = createInstance(defaults);
// 对外暴露 axios 方法
module.exports = axios;

绑定一些公有的方法

// 对外暴露 Axios 类对象
axios.Axios = Axios;

// 对外暴露 createInstance 方法,以便生成另一个 axios 对象
axios.create = function create(instanceConfig) {
    return createInstance(utils.merge(defaults, instanceConfig));
};

// 暴露取消函数,在 config 配置 cancelToken 中有用到,用于主动取消请求
axios.Cancel = require('./cancel/Cancel');
axios.CancelToken = require('./cancel/CancelToken');
axios.isCancel = require('./cancel/isCancel');

// 暴露 all 方法
axios.all = function all(promises) {
  return Promise.all(promises);
};

总结

关于 axios 这个请求库到此也就结束了,收益良多,有关于编程思想的,也有关于浏览器一些默认对象的,相信在今后在用这个库也能更加的得心应手。

最后赋上 Axios 的文件关系。
image