【问题标题】:Javascript İf Promise Loaded Onclick Then İf Again Onclick Dont Load Again?Javascript İf Promise 加载 Onclick 然后 İf 再次 Onclick 不再加载?
【发布时间】:2020-02-26 02:23:18
【问题描述】:
var sarki = document.getElementsByClassName("sarki")[0];
var modal = document.getElementById("myModal");
var span = document.getElementsByClassName("close")[0];

sarki.onclick = function () {
  document.getElementsByClassName("siyah")[0].innerHTML = "<div class='loader'></div>";
Promise.all([
  fetch('blabla.txt').then(x => x.text())
]).then(([sarki]) => {
  document.getElementsByClassName("siyah")[0].innerHTML = sarki;
}),modal.style.display = "block",document.title="blabla";
}

span.onclick = function() {
  modal.style.display = "none",document.title="blabla";
}

window.onclick = function(event) {
  if (event.target == modal) {
    modal.style.display = "none",document.title="blabla";
  }
}

如您所见,单击按钮是否会获得 txt 文件,但再次如您所见,我打开了模式,您可以关闭该模式,但如果您再次单击该按钮(不刷新页面),该 txt 文件将再次加载。 .我只是想检查是否加载了txt文件然后不再加载因为我制作了歌曲列表但是如果再次加载播放歌曲正在停止...

如果加载的文件不使用 javascript(没有库)再次加载,我该怎么办?

【问题讨论】:

  • 您有没有想过在最初提取txt文件时将一个变量设置为true,然后不执行提取?
  • İ如果我理解你是正确的,是的,我想成为如果 txt 文件加载 true 不要再次加载,否则如果 txt 文件未加载加载它......(对不起我的英语不好)

标签: javascript promise


【解决方案1】:

您需要跟踪文本文件是否已经加载。您也不需要Promise().all(),因为您处理的是单个因素(文件),而不是多个因素。

let file; //<-- file loaded tracker
sarki.onclick = function () {
    let prom = new Promise(res => {
        !file ?
            fetch('blabla.txt').then(x => res(file = x.text())) :
            res(file);
    });
    prom.then(file => {
        document.getElementsByClassName("siyah")[0].innerHTML = file;
    });
}

【讨论】:

  • İ 尝试了该代码,但是当我关闭模式并再次单击按钮时,txt 文件将再次加载...所以我的问题没有解决:(
  • 不,不会。检查网络控制台。它加载文件一次,然后从缓存变量file 读取,随后的时间。
  • 不,缓存 Promise 而不是它的有效负载。否则,快速第二次单击 sarki 会发现file 仍然是虚假的,并且将启动第二次获取......不必要的。另一方面,缓存 Promise 允许在第一次点击时同步设置缓存,并且后续点击不会发现 file 仍然未定义。
猜你喜欢
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多