2013-07-22 74 views
1
function sample() { 

     var callback_1 = request1(function(response) { 

      var Name = response.name; 

     }); 


     var callback_2 = request2(function(response_1) { 

       if (response_1.name === Name) { 

        // do something  
       }); 
     } 

} 

叫我两个回调函数,如上图所示,callback_1 & callback_2从服务请求JSON。两个回调函数不同步

callback_2之前callback_1被称为和可变名称被示出为未定义。任何帮助非常感谢,

我怎样才能让前callback_2使可变名称不是不确定的执行callback_1。

+4

呼叫callback_2从callback_1 ...提示:只要将第一个 “});”到最后一个“}”的后面 – dandavis

+2

'Name'是'callback_1'函数的局部变量..它总是未定义的。 – tymeJV

+2

@tymeJV即使Name是全局变量,在执行callback_2之后调用callback_1,因此Name被定义为undefined – min2bro

回答

4

试试这个:

function sample() { 

    var callback_1 = request1(function(response) { 
     var Name = response.name; 

     var callback_2 = request2(function(response_1) { 
      if (response_1.name === Name) { 
       // do something  
      } 
     }); 
    }); 

} 
+0

+1 OP也可以使两个函数异步执行,然后确保request1在将request2的结果与Name进行比较之前完成。这样做对于这个问题来说可能是不必要的复杂,如果两个请求都需要很长时间才会真正需要。 –

+0

感谢哥们!它的工作.. – min2bro

2

jQuery的Ajax请求返回一个Deferred对象(assumming request1和请求2是某种形式的AJAX调用)。看看http://api.jquery.com/category/deferred-object
您可以使用的东西线沿线的:

function sample() { 
    var Name; 
    var callback_1 = request1(function(response) { 
     Name = response.name; 

    }); 


    callback_1.then(
     callback_2 = request2(function(response_1) { 

      if (response_1.name === Name) { 

       // do something  
      }; 
     }) 
    ); 

} 
+0

谢谢..这对我来说也适用。 – min2bro