【问题标题】:Injecting Multiple Dependencies in do...while在 do...while 中注入多个依赖项
【发布时间】:2016-03-04 14:23:23
【问题描述】:

在将我的应用程序安装到给定节点之前,我尝试将多个依赖项注入 DOM,但它挂起/崩溃。

function injectSingle (file, done) {
    var source;

    switch (file.type) {
        case 'js':
            source = document.createElement('script');
            source.src = file.src;
            source.async = true;
            break;

        case 'css':
            source = document.createElement('link');
            source.href = file.src;
            source.type = 'text/css';
            source.rel = 'stylesheet';
            break;
    }

    if (source.readyState) { // IE
        source.onreadystatechange = function () {
            if (source.readyState == "loaded" || source.readyState == "complete"){
                source.onreadystatechange = null;
                done();
            }
        };
    } else { // Standard
        source.onload = function () {
            done();
        };
    }

    document.getElementsByTagName('head')[0].appendChild(source);
}

function injectDependencies (files, launch) {
    var ready = 0;
    do {
        injectSingle(files[ready], function () {
            ready++;
            console.log('Ready Count: %s', ready);
        });
    } while (ready < files.length - 1);
    launch();
}

(function () {
    injectDependencies([
        {
            src: '//example.com/dep.min.js',
            type: 'js'
        },
        {
            src: '//example.com/dep.2.js',
            type: 'js'
        },
        {
            src: '//example.com/dep.css',
            type: 'css'
        },
    ], function () {
        React.render(<Application/>, document.getElementById('someId'));
    })
})

请忽略这一点,因为我需要用更多的文字来填充这篇文章。

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Exceptioneur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum。

【问题讨论】:

    标签: javascript dependency-injection


    【解决方案1】:

    我可以通过将 injectDependencies 函数更改为这样来完成它:

    function injectDependencies (files, launch) {
        var script, ready = 0, total = files.length;
    
        while (script = files.shift()) {
            injectSingle(script, function () {
                ready++;
                if (ready == total) launch();
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 2020-08-18
      • 2015-04-02
      • 2017-07-23
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      相关资源
      最近更新 更多