【问题标题】:How to make multiple http requests in my case?在我的情况下如何发出多个http请求?
【发布时间】:2014-10-29 00:47:15
【问题描述】:

我正在尝试使用工厂对象来发出多个 http 请求。我有类似的东西

angular.module('App').factory('myFactory', function($http, $q) {
    var service = {};

    service.setProduct = function(productObj) {
        _productObj = productObj;
    }

    service.makeRequest = function() {
        var deferred = $q.defer();

        $http.post('/api/product', _productObj).success(function(data){
            var id = data.id
            //I am not sure how to chain multiple calls by using promise.
            //$http.post('/api/details/, id).success(function(data) {
            //    console.log(data)
            //}
            deferred.resolve(data);
        }).error(function() {
            deferred.reject('error here');
        })
        return deferred.promise;
    }
    return service;
});







angular.module('App').controller('productCtrl', ['$scope','$http','myFactory',
    function($scope, $http, myFactory) {
        myFactory.setProduct(productObj);
        myFactory.makeRequest()
            .then(function(data) {
               console.log(data) 
            }, function(data) {
               alert(data)
            })

    }
]);

我能够使用 myfactory.makeRequest() 进行一次调用,但不确定如何链接多个 http 请求。有人可以帮帮我吗?谢谢!

【问题讨论】:

    标签: javascript angularjs promise


    【解决方案1】:

    如果您需要发出顺序请求,那么您需要链接 Promise。你甚至不需要创建自己的 deferred 对象 - $http.post 已经返回了一个承诺,所以你可以只需要 .then 它。

    return $http.get("url1")
       .then(function(response){
    
         var nextUrl = response.data;
         return $http.get(nextUrl);
       })
       .then(function(response){
    
         var nextUrl = response.data;
         return $http.get(nextUrl);
       })
       .then(function(response){
    
         return response.data;
       });
    

    .success 用于更传统的无承诺方法

    这是plunker

    【讨论】:

      【解决方案2】:

      阅读一些关于 Promise 的内容。请记住,JS 是异步的。您需要在回调中进行下一次服务器调用(第一个 .then 函数)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-05
        • 1970-01-01
        • 2013-10-24
        • 1970-01-01
        • 1970-01-01
        • 2020-03-02
        相关资源
        最近更新 更多