正确解释JavaScript执行顺序

时间:2013-03-26 18:17:28

标签: javascript

我知道这个问题有很多问题,但所有问题都是根据具体案例量身定做的。我在问这个问题,并希望得到一个每个人在调查此事时都可以使用的答案。

假设我有三个需要按顺序执行的函数,它们都执行异步操作。

对于两个函数,回调很简单:

var fOne = function(callback) {
  // do stuff
  callback();
};

var fTwo = function() {
  // do stuff
};

通话:

fOne(fTwo);

使fTne在fOne完成后运行。如何将fThree添加到这个案例中,以便在fTwo之后运行,这是在fOne之后运行的?

3 个答案:

答案 0 :(得分:2)

基本上,如果我理解你的问题,你会想要将lambda传递给fOne以便能够为fTwo添加参数,然后让fTwo收集回调并像fOne一样调用它。

var fOne = function(callback) {
  // do stuff
  callback();
};

var fTwo = function(callback) {
  // do stuff
  callback();
};

var fThree = function() {
  // do stuff
};

fOne(function() { fTwo(fThree); }); // <- lambda

答案 1 :(得分:1)

由于你没有使用延迟和承诺来同时执行异步操作,而只是在另一个完成时启动一个,所以添加第三个几乎完全相同:

var fOne = function(callback) {
   console.log('1')
   callback();
};

var fTwo = function(callback) {
   console.log('2')
   callback();
};

var fThree = function() {
   console.log('3')
};

fOne(function() {
    fTwo(function() {
        fThree();
    });
});

FIDDLE

答案 2 :(得分:1)

我提出了另一种方法:

var stack = [fOne, fTwo, fThree];
stack.shift()(function() {
    stack.shift()(stack[0]);
});

将functins定义为:

function fOne(callback) {
    setTimeout(function() { // <-- example of async task
        alert('fOne done');
        callback && callback();
    }, 1000);
}

http://jsfiddle.net/kRMr8/2/