axios源码

Posted 杨柳岸残月孤轮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了axios源码相关的知识,希望对你有一定的参考价值。

今日来看一下axios的拦截器,这样在之后的核心Axios构造函数中就更容易理解了.
拦截器也是一个构造函数,然后在原型prototype上加了三个方法,分别是use, eject, forEach
use方法是添加拦截器的,eject是移除拦截器的,forEach则是迭代拦截器.具体请看https://www.kancloud.cn/yunye... 搜索"拦截器"即可

\'use strict\';

var utils = require(\'./../utils\');

function InterceptorManager() {
  this.handlers = [];
}

/**
 * Add a new interceptor to the stack
 * 
 * 在栈中添加一个新的拦截器
 *
 * @param {Function} fulfilled The function to handle `then` for a `Promise`   处理then方法的函数
 * @param {Function} rejected The function to handle `reject` for a `Promise`  处理reject方法的函数
 *
 * @return {Number} An ID used to remove interceptor later  用来移除拦截器的id
 */
InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
  this.handlers.push({
    fulfilled: fulfilled,
    rejected: rejected,
    synchronous: options ? options.synchronous : false,
    runWhen: options ? options.runWhen : null
  });
  return this.handlers.length - 1;
};

/**
 * Remove an interceptor from the stack
 * 
 * 从栈中移除拦截器
 *
 * @param {Number} id The ID that was returned by `use`  上面的use方法返回的id
 */
InterceptorManager.prototype.eject = function eject(id) {
  if (this.handlers[id]) {
    this.handlers[id] = null;
  }
};

/**
 * Iterate over all the registered interceptors  迭代所有注册的拦截器
 *
 * This method is particularly useful for skipping over any
 * interceptors that may have become `null` calling `eject`.
 *
 * 这个方法在跳过已经是null的拦截器时,特别有用
 * 
 * @param {Function} fn The function to call for each interceptor  每个拦截器都被调用的函数
 */
InterceptorManager.prototype.forEach = function forEach(fn) {
  utils.forEach(this.handlers, function forEachHandler(h) {  // utils文件中的forEach方法, 参考axios源码(三)
    if (h !== null) {
      fn(h);
    }
  });
};

module.exports = InterceptorManager;

以上是关于axios源码的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

axios源码解析

axios源码分析

axios源码深入解读(电子文档)

axios源码深入解读(电子文档)

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段