2016-06-28 3 views
0

Ich habe zwei HTTP-Anfragen. 1. Post-Methode 2. Methode abrufen.

Ich brauche Daten von zwei http Anfrage.

Ich habe meinen Code hinzugefügt. Aber ich denke, das ist nicht der richtige Ansatz. Bitte schlage mich vor.

Frage 1:

Nach zwei Aufruf zu synchron. -Controller

(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'); 
     }); 
    }; 

})(); 

Servicecode:

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; 
    } 

}]); 

Frage -2.

Bitte auch suggetme zwei HTTP-Anfrage hängt von zwei API. Erste HTTP-Anfrage-Daten müssen in zweite API analysieren.

+0

vielleicht würden Sie meine [Winkel httpshooter] (https wollen tun könnte zur Kasse:/(http://www.npmjs.com/package/angular-httpshooter), macht es ziemlich genau dasselbe mit besserer Kontrolle – Siddharth

Antwort

1

Versprechen sind eine gute Möglichkeit, Sie Anrufe zu verketten.

$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) { 

}); 

Wenn Sie zwei Anrufe haben, dann müssen gelöst werden, bevor Sie etwas tun können Sie etwas wie das

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

wie wir Fehler – RSKMR

+0

gut auf die gleiche Weise behandeln können $ tp(). then(). dann(). fangen (err => ...) ' – Daniel