从零实现axios(结尾)

92 阅读1分钟

spread,all 等未实现的功能

我们在实际工作中,经常用到并发请求来发起多个请求,axios 通过如下方式来发起并发:

function getUserAccount() {
  return axios.get("/user/12345");
}

function getUserPermissions() {
  return axios.get("/user/12345/permissions");
}

axios.all([getUserAccount(), getUserPermissions()]).then(
  axios.spread(function (acct, perms) {
    // 两个请求现在都执行完成
  })
);

我们通过 axios.all 来发起并发请求,然后通过 axios.spread 来处理多个请求的返回值。它们的实现如下:

axios.all = function all(promises) {
  return Promise.all(promises);
};
axios.spread = require("./helpers/spread");

axios.spread 的实现是在 helpers/spread.js 文件下,spread 函数接收一个回调,返回一个 wrap 函数,wrap 函数的 arr 参数就是多个请求的返回值,它是一个数组。然后通过 apply 函数把数组的内容传入到 spread 函数接收的回调中。

"use strict";

module.exports = function spread(callback) {
  return function wrap(arr) {
    return callback.apply(null, arr);
  };
};

如果开发者不想用默认的 axios 实例,axios 也对外提供了 axios.create 函数,方便用户创建自己的 axios 实例

var mergeConfig = require("./core/mergeConfig");

function createInstance(defaultConfig) {
  // ...

  // 创建新实例的工厂
  instance.create = function create(instanceConfig) {
    return createInstance(mergeConfig(defaultConfig, instanceConfig));
  };

  return instance;
}

var axios = createInstance(defaults);

我们的课程到此结束了,在此祝贺大家完成了 axios 源码的学习。