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

标签 javascript angularjs node.js mongoose schema

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

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

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

这是我的 Controller (在 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 并根据每个医生计算出他们的排名并将排名发送回客户端( Controller )。 获得排名后,我想将所有数据显示到屏幕上, 但我在 Angular 同步方面遇到问题,它打印了所有医生,然后打印了排名,我想将它们打印在一起, 我需要做什么来修复它?

谢谢

最佳答案

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

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

所以这会

  1. 获取所有医生
  2. 循环医生
  3. 对每位医生进行 API 调用以获取他们的排名
  4. 设置医生排名
  5. 将医生插入可视数组

关于javascript - 从两个 http req 获取数据并将它们组合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43260335/

相关文章:

javascript - 逐一读取文件并解析

javascript - Angular Directive(指令)内的 jquery 日期选择器

javascript - AngularJs ng-repeat 是在复选框上注册两个点击事件吗?

angularjs - 默认情况下,如何在我的 http-server 中提供 index.html

node.js - sequelize.js 创建 db 表时,表行有没有限制?

javascript - 如何有效地将预定义大小的大块分割成较小的 block ,这些 block 是 JavaScript 中大小的因素?

javascript - 分机号 : tpl config is ignoring html in Panel

node.js - 使用 nvm 管理 Node 版本时,是否应该将 webstorms Node 解释器指向它?

javascript - node.js 本地模块 : module not found error in subfolder

javascript - 如何在 jquery 自动完成中添加新项目选项?