异步解决方案基础之模块加载

本文介绍了一个简单的JavaScript模块加载器实现,通过定义和加载不同的模块来管理代码依赖。该加载器支持同步和异步加载模块,并展示了如何使用回调进行模块间的通信。
var models={
    callback:function(data){
        return data
    }
}
function define(name,args){
    models[name]=args

}
function require(name,callback){
    //解析
    if(Object.prototype.toString.call( models[name])=="[object Array]"&&models[name].length==1){
        models[name]=models[name][0]()
    }
    if(Object.prototype.toString.call( models[name])=="[object Array]"&&models[name].length>1){
        var args=models[name]
        var func=args.pop()
        var len=args.length
        var dataArr=[]
        var sync=args.indexOf("callback")
        for(var i=0;i<args.length;i++){
            var model=args[i]
            require(args[i],function(data){
                if(model=="callback"){
                    dataArr.push(function(back){
                        models[name]=data(back)
                        require(name,callback)
                    })
                }else{
                    dataArr.push(data)
                }
                if(--len==0){
                    var re1=func.apply(this,dataArr)
                    if(sync==-1){
                        models[name]=re1
                        require(name,callback)
                    }
                }
            })
        }
    }else{
        callback(models[name])
    }
}
define("a",[function(a){

    return "a"
}])
define("b",["a","callback",function(a,callback){
    console.log(a)
    setTimeout(function(){
        callback("b sync")
    },1000)

}])
define("c",["callback","a","b",function(callback,a,b){
    console.log(b)
    console.log(a)
    setTimeout(function(){
        callback("c sync")
    },1000)

}])
require("c",function(c){
    console.log(c)
})

  

转载于:https://www.cnblogs.com/caoke/p/6007035.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值