2016-06-28 55 views
0

我有两个http请求。 1. post方法 2. get方法。

我需要从两个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。

+0

也许你会想签我的[角httpshooter(HTTPS:/ (http://www.npmjs.com/package/angular-httpshooter),它几乎做同样的事情,更好的控制 – Siddharth

回答

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

我们如何能够以相同的方式处理错误 – RSKMR

+0

'$ http()。then()。then()。catch (err => ...)' – Daniel