首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jquery控制执行顺序

用jquery控制执行顺序
EN

Stack Overflow用户
提问于 2012-12-12 02:33:58
回答 1查看 1.3K关注 0票数 1

这应该是简单的,但许多旧的答案,所以似乎有点错误。我希望能够异步加载库、插件和代码,但要确保它们是按照顺序执行的。

这类事情不起作用,因为脚本在加载时就会执行,这可能不是按照列出的顺序执行的:

代码语言:javascript
复制
if (someCondition) {
  $.ajax({
    url: "theLibrary.js",
    dataType: "script",
    cache: true,
    success: function(data) {
      console.log("library loaded and executed");
    }
  });
  $.ajax({
    url: "thePlugin.js",
    dataType: "script",
    cache: true,
    success: function(data) {
      console.log("plugin loaded and executed");
    }
  });
  $.ajax({
    url: "theCode.js",
    dataType: "script",
    cache: true,
    success: function(data) {
      console.log("code loaded and executed");
    }
  });
}

第一个尝试可能是在回调中嵌套依赖项,如下所示:

代码语言:javascript
复制
if (someCondition) {
  $.ajax({
    url: "theLibrary.js",
    dataType: "script",
    cache: true,
    success: function(data) {
      console.log("library loaded and executed");
        $.ajax({
          url: "thePlugin.js",
          dataType: "script",
          cache: true,
          success: function(data) {
            console.log("plugin loaded and executed");
            $.ajax({
              url: "theCode.js",
              dataType: "script",
              cache: true,
              success: function(data) {
                console.log("code loaded and executed");
              }
            });
          }
        });
    }
  });
}

现在,这解决了执行问题(尽管读起来很难),但问题是,在加载和执行前一个脚本时,第二个和第三个脚本的loading被阻塞了。换句话说,加载和执行没有完全解耦。

.ajax或其速记的继子.getScript中似乎没有延迟执行的选项。从医生那里:

dataType:"script":将响应计算为JavaScript,并将其返回为纯文本。

换句话说,加载和执行似乎是完全耦合的。是否有一种干净的方法来处理这种类型的深度嵌套依赖关系,只使用jquery,,而不使用额外的脚本加载库

EN

回答 1

Stack Overflow用户

发布于 2013-05-02 10:41:07

您可以尝试使用Async.js系列方法,尽管最初对于Node.js来说,它也可以在浏览器中工作。

所以基本上你可以做一些事情

代码语言:javascript
复制
async.series([
    function(callback){
        // do some stuff ...
        callback(null, 'one');
    },
    function(callback){
        // do some more stuff ...
        callback(null, 'two');
    }
],// optional callback
function(err, results){
        // results is now equal to ['one', 'two']
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13831890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档