2016-08-18 93 views
1
testAngular(); //**(1º)** 

function testAngular() { 

     var uri = 'some_webmethod_url'; 

     var data = { 
      "key": "anything" 
     }; 

     var res = $http.post(uri, data); 

     res.then(function (data) { 

      console.log(data); //**(2º)** 

     }); 

     console.log(data); //**(3º)** 
} 

console.log(data); //**(4º)** 

實際序列爲1º - 3º - 4º - 2º;爲什麼? 更重要的是,我該如何做到這一點? (1º - 2º - 3º - 4º)

回答

1

由於'then'是回調函數,並且在服務器的響應變爲可用時(POST請求完成後)異步調用。所以console.log(data); //**(2º)**只會在接收到響應後執行,但其他處理的其餘部分將繼續。

如果您需要您提到的訂單,則必須將這些說明作爲回調的一部分。另一種選擇是使回調同步,而Angular JS不支持這種回調,但您可以查看源代碼並進行更改。這SO帖子可能會幫助你在那https://stackoverflow.com/questions/13088153/how-to-http-synchronous-call-with-angularjs

或者其他SO帖子中提到的一個小黑客可能會幫助你AngularJs: Have method return synchronously when it calls $http or $resource internally,雖然它不建議。

testAngular(); //**(1º)** 

    function testAngular() { 

      var uri = 'some_webmethod_url'; 

      var data = { 
       "key": "anything" 
      }; 

      var res = $http.post(uri, data); 

      res.then(function (data) { 

       console.log(data); //**(2º)** 

       console.log(data); //**(3º)** 
       console.log(data); //**(4º)** 
      }); 


    } 
相關問題