实现javascript文件动态加载时是顺序执行的方法

  介绍

这篇文章将为大家详细讲解有关实现javascript文件动态加载时是顺序执行的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

之前在写js代码时,想通过代码动态向html中插入一定数量的js文件,文件的依赖关系已经按顺序排好,关键代码大致如下:

var jsFiles=[& # 39; somepath/a.js& # 39;, & # 39; somepath/b.js& # 39;,…];   var=document.head负责人;   jsFiles.forEach((文件)=比;{   var=document.createElement脚本(& # 39;脚本# 39;);   脚本。=& # 39;类型text/javascript # 39;;   脚本。src=https://www.yisu.com/zixun/file;   head.appendChild(脚本);   });

但是在代码执行的过程中,很高频率的报同一个错,大概的意思就是说:研究在执行的时候引用的。js中的方法不存在。错误出现的评率很高,但也不出100%是错。

通过分析我觉得原因应该是这样的:虽然我是按数组中定义的顺序去动态创建脚本标签去加载对应的js文件,但是由于文件的大小以及网络等因素,导致各个文件现在完成的次序并不完全等于请求的次序。比如上面的例子中,如果a.js文件比较大,下载的比研究慢,这样当研究下载完成并开始执行的时候,他所依赖的。js中的变量或方法就会获取不到。

想到的解决方法就是,等前一个文件加载完毕之后再去加载下一个文件,大致代码如下:

函数loadJsFiles (jsFiles) {   返回新的承诺((解决,拒绝)=比;{   var负荷=function (i) {   var文件=jsFiles[我];   var=document.createElement脚本(& # 39;脚本# 39;);   脚本。=& # 39;类型text/javascript # 39;;   脚本。onload=function () {   我+ +;   如果(我===jsFiles.length) {   解决();   其他}{   负载(我);   }   }   脚本。src=https://www.yisu.com/zixun/file;   head.appendChild(脚本);   };   负载(0);   });   }

上面的方法也可以改为链式的承诺调用或者回调嵌套,虽然最终解决了问题,但是有一个问题,文件从异步加载变成了同步加载,增加了的文件下载的时间,文件越多的时候影响越明显,所以正确的思路应该是异步加载文件,但是执行一个文件的时候需要等到它所依赖的文件加载完毕并首先执行,对于这个问题,大家可以借鉴第三方库如需要。js,或者es6中引入的模块化功能完美解决这些问题。

关于实现javascript文件动态加载时是顺序执行的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

实现javascript文件动态加载时是顺序执行的方法