/*
并发加载函数
id:唯一值
syncFunc:加载函数
*/
const _map={}
async function conCurentLoad (id,syncFunc) {
//兼容并发加载的情况
if(!_map[id]){
_map[id]=[];
const res = await syncFunc();
if(_map[id].length>0){
_map[id].forEach(function (callback) {
callback(res)
})
}
delete _map[id]
return res;
}else{
return new Promise(function (resolve) {
_map[id].push(resolve)
});
}
}
//并发加载demo
async function init(){
const midajax= function(){
return new Promise(function (resolve,reject) {
setTimeout(function () {
resolve(21)
},3000)
})
}
conCurentLoad(1,midajax).then(function (res) {
console.log(res)
})
conCurentLoad(1,midajax).then(function (res) {
console.log(res)
})
}
init()