Promise의 간편한 AMD 로더

3787 단어 Promise
프로미스는 최신 크롬과 FF에서 이미 구현됐다.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

좋은 웹페이지 즐겨찾기