var allModules = []; //func为结果,cb为函数 function define(id,deps,cb){ if(!allModules[id]){ allModules[id] = {}; allModules[id].defined = true; allModules[id].cb = cb; if(deps.length == 0){ _justLoad(id); }else{ var loadPros = []; deps.forEach(function(value){ if(!allModules[value]){ allModules[value] = {}; } var depsLoadPro = new Promise(function(resolve){ var script = document.createElement('script'); script.onload = function(){ resolve(); } script.src = value + '.js'; document.body.appendChild(script); }).then(function(){ if(!!allModules[value].func){ return allModules[value].func; }else{ return allModules[value].initPro; } }); loadPros.push(depsLoadPro); }); allModules[id].loadPro = Promise.all(loadPros).then(function(values){ allModules[id].func = cb.apply(null,values); return allModules[id].func; }); } }else{ if(!allModules[id].defined){ allModules[id].defined = true; allModules[id].cb = cb; if(deps.length == 0){ _justLoad(id); }else{ var loadPros = getDepsPro(deps); allModules[id].initPro = Promise.all(loadPros).then(function(values){ allModules[id].func = cb.apply(null,values); return allModules[id].func; }); } } } } function _justLoad(id){ allModules[id].loadPro = new Promise(function(resolve){ resolve(); }).then(function(){ allModules[id].func = allModules[id].cb(); return allModules[id].func; }); } function getDepsPro(deps){ var loadPros = []; deps.forEach(function(value){ if(!allModules[value]){ allModules[value] = {}; } var depsLoadPro; if(!allModules[value].loadPro){ depsLoadPro = new Promise(function(resolve){ var script = document.createElement('script'); script.onload = function(){ resolve(); } script.src = value + '.js'; document.body.appendChild(script); }).then(function(){ return allModules[value].func; }); }else{ depsLoadPro = allModules[value].loadPro; } loadPros.push(depsLoadPro); }); return loadPros; } var scripts = document.getElementsByTagName('script'); var sLength = scripts.length; var mainJs; for(var i=0;i
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com

文章标题:

文章字数:248

本文作者:泽鹿

发布时间:2019-08-28, 16:45:23

最后更新:2019-08-28, 16:45:23

原始链接:http://panyifei.github.io/2019/08/28/技术/Demo/requirejs/myrequirePromise/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏