2017-04-06 4 views
1

J'ai deux schémas en Mongoose un pour les infos médecins et deux pour le classement. mes médecins schéma:Obtenir les données de deux req http et les combiner

var doctorsSchema = new schema({ 
    Entity: {type:String}, 
    name: {type:String}, 
    Expertise : {type:String}, 
    HMO: {type:String}, 
    Address: {type:String}, 
    reception_hours: [], 
    lat: {type:Number}, 
    lng: {type:Number}, 
    Ranking : {type:Number} 
},{collection: 'doctorsLocation'}); 

mon schéma de classement est le suivant:

var calSchema = new schema({ 
    Entity: {type:String}, 
    name: {type:String}, 
    Expertise : {type:String}, 
    Address: {type:String}, 
    Attention : {type:Number}, 
    Professional: {type:Number}, 
    Availability: {type:Number}, 
    Atmosphere: {type:Number}, 
    Recommendation: {type:Number} 
},{collection: 'cal'}); 

Je veux calculer le classement de chaque médecin et après pour imprimer tous les détails de chaque médecin à l'écran.

c'est mon contrôleur (en AngularJS):

mymedical.controller('calCtrl',['$scope','$http','$cookies', function($scope,$http,$cookies){ 
var generalInfo = Array(); 

    $http.get('http://localhost:3000/doctors').then(function(response){ 
     //console.log(response); 
     var generalData = response.data; 

    for(var i=0; i<generalData.length; i++){ 
    $http.post('http://localhost:3000/calculateRanking',generalData).then(function(res){ 
      //console.log(res.data); 
      var info ={}; 
      info.Ranking = res.data; 
      //console.log(res.data); 
      console.log("1"); 
      info.Entity = generalData[i].Entity; 
      info.name = generalData[i].name; 
      info.Expertise = generalData[i].Expertise; 
      info.Address = generalData[i].Address; 

      info.reception_hours=generalData[i].reception_hours; 
      info.HMO=generalData[i].HMO; 
      generalInfo.push(info); 
     }).then(last(generalInfo)); 
    } 

        //info.Ranking = 0; 
      //console.log(rank); 


    }); 

function last(val) 
{ 
    $scope.general = val; 
    //console.log(generalInfo); 
    console.log("last"); 
} 


}]); 

J'envoie tout côté serveur tous les médecins et, je fonction qui calcule le classement dans le côté serveur (Node.js) la fonction obtenir calSchema et plus selon chaque médecin leur calculer le classement et renvoyer au client (contrôleur) le classement. Après avoir obtenu le classement je veux afficher toutes mes données à l'écran, mais j'ai un problème avec la synchronisation de angulaire son imprimer moi tous les médecins et après m'imprimer le classement, et je veux les imprimer ensemble, Ce que je dois faire pour le réparer?

Merci,

+0

Il ressemble à tout le réseau de médecins est envoyé à l'api "de calculateRanking". Et ça se passe pour chaque docteur. Voulez-vous simplement envoyer un médecin à la fois? –

+0

oui exactement ce que je veux dire – adi

Répondre

1

Si je comprends bien, je pense que cela peut être ce que vous voulez

$http.get('http://localhost:3000/doctors').then(function(doctors) { 
     angular.forEach(doctors.data, function(doctor) { 
      $http.post('http://localhost:3000/calculateRanking', doctor) 
       .then(function(res) { 
        doctor.Ranking = res.data; 
        $scope.general.push(doctor); 
       }); 
     }); 
    }); 

Alors cela

  1. Obtenez tous les médecins
  2. boucle par les médecins
  3. Pour chaque médecin, appelez l'API pour obtenir son classement
  4. Définir le classement
  5. Push le médecin dans le tableau visible
+0

merci, son bon fonctionnement !! – adi

0

Je suggère d'utiliser $q, peut-être besoin d'un peu de peaufinage du médecin. J'espère que cela aide.

vous permet d'exécuter les fonctions de manière asynchrone

function postDocData(doc) { 
    return $http 
    .post('http://localhost:3000/calculateRanking', doc) 
    .then(function(res) { 
     doctor.Ranking = res.data; 
     $scope.general.push(doctor); 
    }); 
} 

$http.get('http://localhost:3000/doctors').then(function(doctors) { 
    var docPromiseArray = []; 

    angular.forEach(doctors.data, function(doctor) { 
    docPromiseArray.push(postDocData(doctor)); 
    }); 

    $q.all[docPromiseArray] 
    .catch(function(err) { 
     //error handling 
     console.log(err); 
    }) 
    .finally(function() { 
     //more processing 
    }) 
}); 
+0

merci, mais la suggestion avant de travailler pour moi – adi