2016-08-18 7 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º)**は、応答が受信された後にのみ実行されますが、他の処理は残ります。

あなたが言及した順序を望むなら、それらのステートメントをコールバックの一部として行う必要があります。もう1つの選択肢は、コールバックを同期させることです。このコールバックは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º)** 
      }); 


    } 
関連する問題