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
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 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" 转载请保留原文链接及作者。