jQuery延迟$ .when回调到早期

时间:2013-10-18 12:32:43

标签: javascript jquery jquery-deferred

当使用jQuery Deferred类加载模块时,我得到了一些奇怪的行为。写入“所有模块已加载”的已完成加载队列的回调在队列完成之前触发。 我对延迟模式的使用是错误的吗?

var ModuleMgr = {
    [...]
loadModule: function(name){
        var deferred = new $.Deferred();
        var module = ModuleMgr.getModuleByName(name);
        module.init(function(result){
            deferred.resolve(1);
        });
        return deferred;
    },

    loadAll: function(onReady, onError){
            var self = ModuleMgr;
        var promises = [];
        for ( var current in self.needLoading ){
            var module_name = self.needLoading.pop();
            try{
                var d = self.loadModule(module_name);
                promises.push(d.promise());
            }
            catch(e){
                console.log('Failed to load module' +module_name);
                self.needLoading.push(module_name);
                setTimeout(self.loadAll, 2000); // Try again
            }
        }

        $.when.apply(null, promises).then(
            function(status){
            console.log('All Modules loaded');
        }, function(status){
            console.log('Error happended: '+ status);
        }, function(status){
            console.log('Status'+ status);
        });
    }
}

0 个答案:

没有答案
相关问题