从两个 http req 中获取数据并将它们组合起来

Posted

技术标签:

【中文标题】从两个 http req 中获取数据并将它们组合起来【英文标题】:Get data from two http req and combine them 【发布时间】:2017-09-01 18:55:16 【问题描述】:

我在猫鼬中有两个架构,一个用于医生信息,两个用于排名。 我的医生架构:

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

我的排名架构是:

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

我想计算每个医生的排名,然后将每个医生的所有详细信息打印到屏幕上。

这是我的控制器(在 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");



]);

我将所有医生都发送到服务器端,然后, 我有计算服务器端排名的功能(node.js) 函数获取 calSchema 并根据每个医生计算他们的排名并将排名发送回客户端(控制器)。 获得排名后,我想将所有数据显示到屏幕上, 但是我有角度同步的问题,它打印我所有的医生,然后打印我的排名,我想把它们打印在一起, 我需要做什么来修复它?

谢谢,

【问题讨论】:

看起来整个医生数组都被发送到“calculateRanking”api。每个医生都在发生这种情况。你的意思是一次只派一名医生去吗? 是的,正是我的意思 【参考方案1】:

如果我理解正确,我想这可能就是你想要的

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

这样会

    获取所有医生 遍历医生 为每位医生调用 API 以获取他们的排名 设置医生排名 将医生推入可视阵列

【讨论】:

【参考方案2】:

我建议使用$q,可能需要稍作调整。希望对您有所帮助。

帮助您异步运行函数

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

【讨论】:

以上是关于从两个 http req 中获取数据并将它们组合起来的主要内容,如果未能解决你的问题,请参考以下文章

查询从两个表中获取数据并将它们一起返回

需要一个“for循环”来从它们各自的api url获取股票投资组合的股息数据

如何从 firestore 两个集合中获取数据并将所有数据合并在一起

如何从 Access 数据库中检索某些数据并将它们显示在组合框中

如何从两个不同的、不相关的表中获取最新的行,并将它们合并到一个结果集中?

如何使用组合来分配从核心数据获取请求返回的元素数量?