2016-02-21 56 views
0

我在我的JavaScript代码中有3个函数。我想在function1和function2都执行完毕后立即调用第三个函数。Javascript函数排序。

func_one(); 
func_two(); 

func_three(); // To be called as soon both of the above functions finish executing. 

注意,它们可能需要可变时间,因为函数1和2分别是用于获取地理位置和一些AJAX请求。

+0

你将不得不提供更多关于这些功能包含的细节?如果它的ajax调用,那么你可以简单地在ajax成功方法中调用func_three()。 –

回答

0

这个怎么样?

func_one() { 
    // Do something 
    func_two(); 
} 

func_two() { 
    // Do something 
    func_three(); 
} 

func_three() { 
    // Do something 
} 
+1

因为他说他在async中的函数里面有ajax调用这个逻辑将不起作用 –

0

有两种方法可以解决这个问题。第一种方法是创建回调函数作为您现有函数的参数。

function one(param_1 .. param_n, callback) { 
    var response = ... // some logic 
    if (typeof callback === "function") { 
     callback(response); 
    } 
} 

第二种方法是使用Promises像:

var p1 = new Promise(
    function(resolve, reject) { 
     var response = ... //some logic 
     resolve(response); 
    } 
} 

var p2 = new Promise(...); 

p1.then(function(response1) { 
    p2.then(function(response2) { 
      //do some logic 
    }) 
}) 
0

你可以尝试这样的

var oneFinish = false; 
var twoFinish = false; 

function one(){ 
    //... 
    oneFinish = true; // this value may depends on some logic 
} 

function two(){ 
    //... 
    twoFinish = true; // this value may depends on some logic 
} 

function three(){ 
    setInterval(function(){ 
     if(oneFinish && twoFinish){ 
      //... 
     } 
    }, 3000); 
} 
0

由于您的功能func_onefunc_two正在服务呼叫可以调用的函数在之前函数的成功回调之后。像

func_one().success(function(){ 
     func_two().success(function(){ 
      func_three(); 
     }); 
    });