Javascript 如何实现缓存| |权力游戏API
我正在玩权力游戏Api- 文件中提到他们正在实施利率限制。因此,实现缓存非常重要 比如说,我想通过点击按钮打印Api中所有房屋的名称Javascript 如何实现缓存| |权力游戏API,javascript,caching,Javascript,Caching,我正在玩权力游戏Api- 文件中提到他们正在实施利率限制。因此,实现缓存非常重要 比如说,我想通过点击按钮打印Api中所有房屋的名称 function getAllHouseNames() { for (let i = 1; i <= 45; i++) { getHouseNames(i) } } async function getHouseNames(page) { var req = new XMLHttpRequest(); req.onr
function getAllHouseNames() {
for (let i = 1; i <= 45; i++) {
getHouseNames(i)
}
}
async function getHouseNames(page) {
var req = new XMLHttpRequest();
req.onreadystatechange = await
function() {
if (this.readyState == 4 && this.status == 200) {
//console.log(req.getResponseHeader("link"));
let houseObj = JSON.parse(this.responseText);
for (let i = 0; i < houseObj.length; i++) {
let p = document.createElement("p");
let name = document.createTextNode(houseObj[i].name);
p.appendChild(name);
document.body.appendChild(p);
}
}
};
req.open("GET", "https://www.anapioficeandfire.com/api/houses?page=" + page + "&pageSize=10", true);
req.send();
};
函数getAllHouseNames(){
for(让i=1;i创建一个全局/模块级变量。在下面的代码中,我将其称为cache。然后在检索到属性后将其添加到其中。然后,这些属性可供以后使用
<!doctype html>
<head>
<title>A Song of Ice and Fire</title>
<!-- include jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
var cache = {}; // create a new object for the cache
$(document).ready(function() {
// once the page is loaded, register a click listener on the button
$("#btn-get-house-names").on("click", getAllHouseNames);
});
function getAllHouseNames() {
// if the cache object doesn't have
// a property called "houseNames", go ajax
// otherwise just display the house names in the document
if (!cache.houseNames) {
$("#div-house-names").html("Getting House Names");
getHouseNamesAjax()
} else {
$("#div-house-names").html("");
$.each(cache.houseNames, function(index, houseName) {
$("#div-house-names").append("<p>" + houseName + "</p>");
});
}
}
function getHouseNamesAjax(page) { // use jQuery to ajax
let pageId = "";
let pageSize = "pageSize=10";
if (page) {
pageId = "?page=" + page + "&" + pageSize;
} else {
pageId = "?" + pageSize;
}
$.ajax({
type: "GET",
url: "https://www.anapioficeandfire.com/api/houses" + pageId,
dataType: "json",
success: function(data, textStatus, request) {
if (!cache.houseNames) { // add the houseNames array to the cache object
cache.houseNames = [];
}
$.each(data, function(index, house) {
cache.houseNames.push(house.name); // append to the end of the array
});
if (request.getResponseHeader("link")) { // this looks to see if there is another page of house names
let headerLinks = request.getResponseHeader("link").split(",");
let hasNext = false;
$.each(headerLinks, function(index, headerLink) {
let roughLink = headerLink.split("; ")[0];
let roughRel = headerLink.split("; ")[1];
let rel = roughRel.substring(5, roughRel.length - 1);
if (rel == "next") {
let pageNum = roughLink.split("?page=")[1].split("&page")[0];
getHouseNamesAjax(pageNum);
hasNext = true;
return false; // break out of $.each()
}
});
if (!hasNext) {
// if no more pages of houseNames,
// display the house names on the page.
// We have to do this here, because ajax is async
// so the first call didn't display anything.
getAllHouseNames();
}
}
},
error: function(data, textStatus, request) {
alert(textStatus);
}
});
};
</script>
</head>
<body>
<input type="button" id="btn-get-house-names" value="Get House Names"/>
<div id="div-house-names"> <!-- house names -->
</div>
</body>
</html>
冰与火之歌
var cache={};//为缓存创建一个新对象
$(文档).ready(函数(){
//加载页面后,在按钮上注册一个单击侦听器
$(“#btn获取房屋名称”)。在(“单击”,获取所有房屋名称);
});
函数getAllHouseNames(){
//如果缓存对象没有
//一个叫“houseNames”的酒店
//否则,只需在文档中显示房屋名称即可
如果(!cache.houseNames){
$(“#div house names”).html(“获取房屋名称”);
getHouseNamesAjax()
}否则{
$(“#div house names”).html(“”);
$.each(cache.houseNames,函数(索引,houseName){
$(“#div house names”)。追加(“”+house name+””);
});
}
}
函数getHouseNamesAjax(第页){//使用jQuery创建ajax
让pageId=“”;
让pageSize=“pageSize=10”;
若有(第页){
pageId=“?page=“+page+”&“+pageSize;
}否则{
pageId=“?”+页面大小;
}
$.ajax({
键入:“获取”,
url:“https://www.anapioficeandfire.com/api/houses“+pageId,
数据类型:“json”,
成功:功能(数据、文本状态、请求){
如果(!cache.houseNames){//将houseNames数组添加到缓存对象中
cache.houseNames=[];
}
美元。每个(数据、功能(索引、房屋){
cache.houseNames.push(house.name);//追加到数组末尾
});
if(request.getResponseHeader(“link”){//这将查看是否还有另一页房屋名称
让headerLinks=request.getResponseHeader(“链接”).split(“,”);
让hasNext=false;
$.each(标题链接,函数(索引,标题链接){
设rawLink=headerLink.split(“;”)[0];
设rawrel=headerLink.split(“;”)[1];
设rel=roughRel.substring(5,roughRel.length-1);
如果(rel==“下一步”){
让pageNum=roughLink.split(“?page=”)[1]。split(“&page”)[0];
getHouseNamesAjax(pageNum);
hasNext=true;
return false;//从$.each()中取出
}
});
如果(!hasNext){
//如果没有更多的户名,
//在页面上显示房屋名称。
//我们必须在这里这样做,因为ajax是异步的
//所以第一个电话没有显示任何内容。
getAllHouseNames();
}
}
},
错误:函数(数据、文本状态、请求){
警报(文本状态);
}
});
};
你不能等待一个函数。你的意思是围绕XHR构建一个新承诺吗?谢谢!是的,这就是我要做的。另外,我如何实现缓存技术,以便每次用户单击按钮时不会触发45个请求?getAllHouseNames函数带有承诺,但首先你不需要让你的函数正确地返回一个承诺吗