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 源码的学习。