2016-08-18 53 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º)** 
      }); 


    } 
相关问题