javascript加载外部文件并继续处理

时间:2011-10-25 18:49:01

标签: javascript callback

所以我试图避免加载某些脚本,直到用户需要它们,但我一直在使用if ... else的模式结束,并在两个地方调用continue代码。在下面的代码中,您可以看到对continueProcessing()方法的两次调用。有没有更好的方法呢?

if (typeof sessionList === "undefined" || typeof sessionList != "function") {
  $.getScript('resources/sessionList.js', function() {
    continueProcessing();
  });
} else {
  continueProcessing();
}


function continueProcessing() {
    // do stuff
}

3 个答案:

答案 0 :(得分:1)

我还没有使用过getScript,但是在加载html模板时遇到了类似的挑战。我一直在使用延期/承诺方法。对于你的情况看起来像这样:

var jqXHR = {};
if (typeof sessionList === "undefined" || typeof sessionList != "function") {
    jqXHR = $.getScript('resources/sessionList.js');
}
$.when(jqXHR).then(continueProcessing());

在脚本已经存在的情况下,jqXHR var将不会延迟,因此"然后"立即执行。

这仍然是一些要键入的代码,但至少" continueProcessing"只出现一次。

答案 1 :(得分:0)

这对我来说是一种很好的方式。

答案 2 :(得分:0)

所以我玩了$ .Deferred模式/代码,我想出了这个。它并不简洁,但我认为这是一种更清洁的方式。看起来我有很多代码需要重构......

    var dfd = $.Deferred();

    if ( typeof sessionList === "undefined" || typeof sessionList != "function" ) {
        $.getScript('resources/sessionList.js', function(){
            dfd.resolve();
        });
    }

    dfd.done(function() {
       continueProcessing();
    });