• Promise实现简易AMD加载器


    在最新的Chrome和FF中已经 实现了Promise。有了Promise我们用数行代码即可实现一个简易AMD模式的加载器

    var registry = {
        promises: { },
        resolves: { },
        getDependencyPromise: function(name) {
            if (!this.promises[name]) {
                var resolves = this.resolves;
                this.promises[name] = new Promise(function(resolve, reject) {
                    resolves[name] = resolve;
                });
            }
            return this.promises[name];
        },
        resolve: function(name, value) {
            this.getDependencyPromise(name); // creates promise if necessary
            this.resolves[name](value);
            delete this.resolves[name];
        }
    };
    
    function define(name, deps, definition) {
        require(deps, function() {
            registry.resolve(name, definition.apply(this, arguments));
        });
    }
    
    function require(deps, definition) {
        var promises = deps.map(registry.getDependencyPromise, registry);
        Promise.all(promises).then(function(result) {
            definition.apply(this, result);
        });
    }

    使用方式如下

    define('framework', ['component', 'library'], function(cmp, lib) {
        return { init: 'initialized:
    component: ' + cmp.description +
            '
    and library: ' + lib.version};
    });
    
    require(['framework'], function(framework) {
        alert(framework.init);
    });
    
    define('library', [], function() {
        return { version: '0.0.1' };
    });
    
    define('component', ['library'], function(lib) {
        return { description: 'uses library version: ' + lib.version };
    });

    原文地址    http://curiosity-driven.org/amd-loader-with-promises

  • 相关阅读:
    回溯算法
    再谈排序与图论算法
    Hash表
    B树和TreeSet与TreeMap
    回顾二叉树
    Spring实战第一部分总结
    Lucene6.6添加索引数据时字符个数超限,字符数不能超过BYTE_BLOCK_SIZE=32766
    第一章 机器学习基本概念
    第十至十二章 算法分析--高阶数据结构
    Lucene4.6至 Lucene6.6的每个迭代对API的改动
  • 原文地址:https://www.cnblogs.com/dubaokun/p/3530665.html
Copyright © 2020-2023  润新知