如何解决Javascript 异步函数的第二部分未执行
我是异步 javascript 的新手,我被一些我无法理解的东西阻止了。
侦听器加载 2 个 javascript 文件。加载这两个文件时,它会加载 initGoogleLibraries 函数,这是必要的,因为该函数位于 graphs.js 文件中。当该函数完成时,它应该总是执行 initGraphs()、drawGraphs() 和 mobileRotateScreen(true)。因此,当第一次加载侦听器时,它应该加载两个文件,谷歌库并执行 3 个函数。之后再次加载任意次数时,应该只执行 3 个函数。
下面的代码没有错误。但是再次打开模态时它不会重新执行这3个功能。从假期前开始,我就一直在考虑这一点,因此任何解决方案都将不胜感激:) 它甚至不必遵循我目前获得的代码。
听众
$('#modalreporting').on('shown.bs.modal',function() {
loadjscssfile("https://www.gstatic.com/charts/loader.js","js",function () {
console.log("loaded https://www.gstatic.com/charts/loader.js");
loadjscssfile("js/graphs.js",function() {
initGoogleLibraries("googleCharts").then(function () {
initGraphs();
drawGraphs();
mobileRotateScreen(true);
});
});
});
});
initGoogleLibraries 函数
function initGoogleLibraries(googleLib) {
return new Promise(function(resolve,reject) {
if (filesadded.indexOf("["+googleLib+"]")==-1) {
google.charts.load('current',{
packages: ['corechart','gauge']
}).then(function () {
filesadded+="["+googleLib+"]";
console.log("loaded google Lib");
resolve("loaded google Lib");
});
} else {
resolve("already loaded google Lib");
}
});
}
为了完整和为您提供逻辑的一般概念,我包含了 loadjscssfile 函数。这也被其他监听器和函数使用,所以我不想碰这个。
function loadjscssfile(filename,filetype,callback){
if (filesadded.indexOf("["+filename+"]")==-1){
if (filetype=="js"){ // If filename is a external JavaScript file
// Adding the script tag to the head
var fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src",filename);
// Bind the event to the callback function.
// There are several events for cross browser compatibility.
fileref.onreadystatechange = callback;
fileref.onload = callback;
}
else if (filetype=="css"){ // If filename is an external CSS file
var fileref=document.createElement("link");
fileref.setAttribute("rel","stylesheet");
fileref.setAttribute("type","text/css");
fileref.setAttribute("href",filename);
}
if (typeof fileref!="undefined"){
// Fire the loading
document.getElementsByTagName("head")[0].appendChild(fileref);
console.log("added to html: " + filename);
}
filesadded+="["+filename+"]";
} else {
callback();
console.log("already loaded: " + filename);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。