使javascript加载函数一个接一个地执行

时间:2014-10-31 12:16:16

标签: javascript jquery

我有一个函数,我执行2个函数。当我在浏览器中查看它时,我得到2个加载符号,用于显示数据加载。

我想知道是否有办法一个接一个地执行每个函数,因为我可以避免2个加载符号。我不想在第一个函数中调用第二个函数作为解决方案。

代码如下所示:

function ABCD() {
   function x();
   function y();
}

我希望函数x()完成它的执行,然后从函数y()

开始

2 个答案:

答案 0 :(得分:3)

假设你的函数返回jQuery promise,你可以这样做:

function ABCD() {
   // return the sequential promises
   return x().then(y);  // or return x().done(y); if you want a result after first one only
}

然后在外面,您可以通过这样的呼叫等待两者:

ABCD().done(function(){
    alert("both complete");
});

如果xy进行ajax调用,则返回该值,因为它已经是一个承诺:

e.g。

  function x(){
      return $.ajax(...);
  }

  function y(){
      return $.ajax(...);
  }

工作示例JSFiddle: http://jsfiddle.net/TrueBlueAussie/9e5rx2bx/2/

注意:该示例使用DeferredsetTimeout来模拟ajax加载。打开控制台以查看日志活动。

旧的(非承诺方式)将使用回调,但具体实现取决于您当前的实际代码(未显示):

从jQuery 1.5开始,这是解决此类问题的首选方法。

答案 1 :(得分:1)

这是一个vanilla js选项(注意回调函数x()已经成为可选项(即x()执行得很好而没有回调)。DEMO

function y() {
    //execute code
}

function x(callback) {
    //execute code
    if (typeof(callback) === 'function') {
        callback();
    }
}

function ABCD() {
   x(y());   
}

ABCD();



备有@ TrueBlueAussie建议的替代版本:DEMO2

function x(callback) {
    //execute code
    if(callback) callback()
}