使用函数式编程,封装ajax,并实现数据的缓存
调用一次api,后面再调用api都是返回缓存数据
var requestConfig = {
type: 'get', //请求类型
url: 'http://localhost:38081/mis/test-success', //请求的url
data: null, //请求的数据,类型自定义
isCache: true, //是否缓存结果
isAsync: false //是否异步
} //定义请求体
function getData(requestConfigs) {
xmlhttp = new XMLHttpRequest(); //创建实例
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
responseData = xmlhttp.responseText
}
}
xmlhttp.open(requestConfigs.type, requestConfigs.url, false); //指定同步ajax请求
xmlhttp.send(requestConfig.data);
return responseData
}
function memoize(f) {
var cache = {};
return function (requestConfig) {
var argStr = JSON.stringify(requestConfig.url);
if (requestConfig.isAsync) {
setTimeout(() => {
if (requestConfig.isCache) {
cache[argStr] = cache[argStr] || f(requestConfig);
} else {
cache[argStr] = f(requestConfig);
}
});
} else {
if (requestConfig.isCache) {
cache[argStr] = cache[argStr] || f(requestConfig);
} else {
cache[argStr] = f(requestConfig);
}
}
return cache[argStr];
};
}
var pureHttpCall = memoize((requestConfig) => getData(requestConfig));
function callApi() {
pureHttpCall(requestConfig)
}
涉及的知识点:
- 函数式编程的思想
- js的执行机制,宏队列和微队列
- ajax的使用
- 箭头函数和执行器的调用