【问题标题】:Angularjs + two http request using $qAngularjs + 使用 $q 的两个 http 请求
【发布时间】:2016-06-28 22:00:49
【问题描述】:

我有两个 http 请求。 1.发帖方式 2. 获取方法。

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

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

问题一:

两次调用后同步。 控制器

(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。

【问题讨论】:

标签: javascript angularjs asynchronous angular-promise


【解决方案1】:

Promise 是链接调用的好方法。

$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];
});

【讨论】:

  • 同理$http().then().then().catch(err => ...)
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 2017-08-24
相关资源
最近更新 更多