我可以使用AngularJS($ http),以下调用序列吗?

时间:2016-08-18 13:30:04

标签: angularjs http call sequence

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 个答案:

答案 0 :(得分:1)

因为'然后'是一个回调,当服务器的响应变得可用时(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º)**
            });


    }