You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中Async/Await控制加载遮罩显隐失效问题排查

解决加载遮罩不显示问题

你的问题出在两个关键地方:

1. CSS优先级冲突导致遮罩无法显示

你的.overlay样式里写了display: none!important,这个!important的优先级远高于JS通过style.display设置的样式,所以即使调用loadingOverlayOn(),遮罩也不会显示。

修复方案:

去掉!important,改用类控制显隐(更灵活且避免优先级问题):

.overlay {
  background-color:#EFEFEF;
  position: fixed;
  width: 100%;
  height: 100%;
  z-index: 1000;
  left: 0px;
  display: none;
}
/* 添加show类来显示遮罩,保持原有flex布局样式 */
.overlay.show {
  display: flex;
}

修改JS显隐函数为操作类名:

function loadingOverlayOn() {
  document.getElementsByClassName("overlay")[0].classList.add('show');
}
function loadingOverlayOff() {
  document.getElementsByClassName("overlay")[0].classList.remove('show');
}

2. runSearch未返回Promise导致await失效

await只能等待Promise对象,你的runSearch没有返回Promise,代码会直接跳过await,立刻执行loadingOverlayOff(),导致遮罩刚触发显示就被隐藏,视觉上完全看不到。

修复方案:

让runSearch返回Promise,确保await能等待所有异步操作完成:

如果runSearch里用了fetch API,直接改成async函数(自动返回Promise):

async function runSearch(cityName, cityState, cityCountry, cityLat, cityLng, units) {
  // 同步操作:DOM更新、localStorage操作
  // 等待API请求完成
  const response = await fetch(`https://api.openweathermap.org/data/2.5/weather?lat=${cityLat}&lon=${cityLng}&units=${units}&appid=你的API密钥`);
  const weatherData = await response.json();
  
  // 处理返回的数据(DOM更新等)
  
  return weatherData; // 可选,返回结果供调用者使用
}

如果不用async语法,也可以手动封装Promise:

function runSearch(cityName, cityState, cityCountry, cityLat, cityLng, units) {
  return new Promise((resolve, reject) => {
    // 同步操作
    fetch(`https://api.openweathermap.org/data/2.5/weather?lat=${cityLat}&lon=${cityLng}&units=${units}&appid=你的API密钥`)
      .then(response => response.json())
      .then(data => {
        // 处理数据
        resolve(data);
      })
      .catch(error => {
        // 错误处理
        reject(error);
        loadingOverlayOff(); // 出错时也要隐藏遮罩
      });
  });
}

最终效果

修改后,点击按钮会先显示遮罩,等待runSearch里的所有异步操作(包括API请求)完成后,才隐藏遮罩,解决了遮罩不显示和页面元素提前加载的问题。

内容的提问来源于stack exchange,提问作者ptrcao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:05:29