2016-06-28 56 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