javascript - 在 JavaScript 仍在执行代码时显示图标
问题描述
我有一些 JavaScript 从 URL 获取数据,然后用循环遍历结果forEach
。
该操作可能需要一分钟才能完成,因此我想在页面上显示一个加载符号,以向用户表明他们不应该与页面交互。
function getFloodAreaPolygon() {
let request = new XMLHttpRequest();
let url = floodAreaData[0].polygon;
request.open("GET", url, true);
request.onload = function () {
let data = JSON.parse(this.response);
if (request.status >= 200 && request.status < 400) {
data.features.forEach(geojsonFeature => {
loadFloodAreaPolygon(geojsonFeature);
});
} else {
console.log("error");
}
};
request.send(null);
}
我写了一些代码displayLoadingIcon()
来显示图标并hideLoadingIcon()
隐藏它。
我认为如果我在函数的开头显示图标并在request.send(null)
调用后隐藏它,那么它会在函数的长度内持续存在,但是图标几乎立即消失。
我怎样才能解决这个问题?
编辑:为了清楚起见,不是 AJAX 请求需要一分钟才能完成,而是forEach
循环中包含的处理,loadFloodAreaPolygon(geojsonFeature)
将结果转换为传单标记对象。
解决方案
假设 loadFloodAreaPolygon 也不是异步的,你可以这样做
function getFloodAreaPolygon() {
displayLoadingIcon(); // here
let request = new XMLHttpRequest();
let url = floodAreaData[0].polygon;
request.open("GET", url, true);
request.onload = function() {
let data = JSON.parse(this.response);
if (request.status >= 200 && request.status < 400) {
data.features.forEach(geojsonFeature => {
loadFloodAreaPolygon(geojsonFeature);
});
hideLoadingIcon(); // here
} else {
console.log("error");
}
};
request.send(null);
}
如果它是异步的,那么你可以这样做
data.features.forEach((geojsonFeature,i) => {
loadFloodAreaPolygon(geojsonFeature);
if (i === data.features.length-1) hideLoadingIcon();
});
或将测试传递给函数:
data.features.forEach((geojsonFeature,i) => {
loadFloodAreaPolygon(geojsonFeature,i === data.features.length-1);
});
并将 hideLoadingIcon() 移动到 loadFloodAreaPolygon 成功
推荐阅读
- email - 如何编辑 Odoo 帮助台工单分配消息的模板
- javascript - Viewport datamodel - GetRow().data undefined
- python - Python自建包导入路径
- leaflet - 如何放大到 cql_filter 功能?
- java - 无法从外部包访问 java.awt.Queue
- azure - 使用 RBAC 连接到 Azure 服务总线停止工作
- c# - c#整数运算导致CA2233溢出警告
- python - 使用 TkInter 将两个小部件与滚动条并排设置
- javascript - Chrome.notifications.update 未更新
- angular - 尝试在角度引导时显示微光效果,但动画卡住了