2013-07-22 70 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