Angularjs +使用$ q的两个http请求

时间:2016-06-28 13:53:43

标签: javascript angularjs asynchronous angular-promise

我有两个http请求。 后方法 2.得到方法。

我需要从两个http请求中获取数据。

我添加了我的代码。但我认为这不是正确的做法。请建议我。

问题1:

两次调用同步后。 控制器

(function() {
    'use strict';
    angular.module('myApp').controller('loginController', loginController);
    loginController.$inject = ['$auth', '$http', '$location', '$scope', '$window', '$rootScope', 'commonService', '$q', '$localStorage'];
    // inject an auth service here!
    function loginController($auth, $http, $location, $scope, $window, $rootScope, commonService, $q, $localStorage) {
        commonService.getHostDetails().then(function(data) {
            commonService.login().then(function(data) {

            }).catch(function(data) {
                alert('Sorry ! test function faild');
            });
        }).catch(function(data) {
            alert('Sorry ! login function faild');
        });
    };

})();

服务代码:

angular.module('myApp').factory('commonService', ['$q', '$timeout', '$http',
function($q, $timeout, $http, commonService) {

    return ( {
        login : login,
        test : test,
    });

    function login() {
        // create a new instance of deferred
        var deferred = $q.defer();
        $http.get('host.json')
        // handle success
        .success(function(data, status) {
            deferred.resolve(data);
        })
        // handle error
        .error(function(data) {
            deferred.reject(data);

        });
        // return promise object
        return deferred.promise;

    }

    function test(formData) {
        // create a new instance of deferred
        var deferred = $q.defer();
        console.log("in service");
        console.log(formData);
        $http.post('/api/test', formData, {
            headers : {
                'Content-Type' : 'application/json'
            }
        })
        // handle success
        .success(function(data) {
            deferred.resolve(data);
        })
        // handle error
        .error(function(data) {
            deferred.reject(data);

        });

        // return promise object
        return deferred.promise;
    }

}]);

问题-2。

另外请建议两个http请求取决于两个api。 第一个http请求数据需要解析为第二个api。

1 个答案:

答案 0 :(得分:1)

承诺是链接你电话的好方法。

$http.post("your api").then(function(response) {
  //do something
  return response.data;
}).then(function(data) {

  return $http.get("you other api")
}).then(response_from_second_api) {

});

如果您有两个电话,那么在您可以做任何事情之前需要先解决这个问题

var promise1 = $http.get("");
var promise2 = $http.get("");

$q.all([promise1,promise2]).then(values) {
   var value_of_promise1 = values[0];
   var value_of_promose2 = values[1];
});