Добавить ответ на каждый элемент для цикла в node.js и postgres - PullRequest
0 голосов
/ 11 июня 2018

У меня есть множество таких школ:

{
 "schools": [
            {
                "name": "S1",
                "id": 1
            },
            {
                "name": "S2",
                "id": 2
            },
            {
                "name": "S3",
                "id": 3
            }
        ]
}

, и у каждой школы есть расписание.Чтобы получить это, я перебираю массив школ в обещании, и когда я получаю ответ, я получаю массив, подобный этому

{
 "schools": [
            {
                "name": "S1",
                "id": 1
            },
            {
                "name": "S2",
                "id": 2
            },
            {
                "name": "S3",
                "id": 3
            }
        ],
"schedules": [
            [],
            [
                {
                    "id_schedule": 58,
                    "hour1": "13:00:00",
                    "hour2": "20:00:00",
                    "id_schools_schedule": 2
                }
            ],
            [
                {
                    "id_schedule": 59,
                    "hour1": "06:30:00",
                    "hour2": "22:30:00",
                    "id_schools_schedule": 3
                }
            ]
        ]
}

, который я хочу знать.как выровнять ответ каждого элемента?это мой код

for (var i =0; i < datosRes.schools.length; i++){
                array_horarios.push(ObtSchedule(datosRes.schools, i))
              }
              Promise.all(array_horarios).then(response => {
                datosRes.horarios = response;
                eq.local = data;
              }).catch(err => {
                return res.json(200,{"datos":datosRes});
              })

function ObtHorario(schools, i){
  return new Promise(function(resolve, reject){
    var id_school = schools[i].id;
    Mod_Schedule.obtSchedule(id_school,function(error, data){
      if(error || data.error){
        errorDB = {"error_log": error, "error_data": data.error};
        reject(errorDB)
      }else{
        resolve(data)
      }
    })
  })
}

Что я делаю не так?Я получаю ответ, но только я хочу добавить к каждому пункту школ расписания

Заранее спасибо

1 Ответ

0 голосов
/ 11 июня 2018

Первым делом первым: вы можете отправить ОДИН ответ на ОДИН запрос.Так что ваш вопрос об отправке нескольких ответов недействителен.

Вот что вы можете сделать, вы можете получить массив школ с их расписаниями.

Если вы используете MongoDB, вот что вы можете сделать:

Использование Агрегат запрос:

db.schools.aggregate([
    {
        $match: {} // Your condition to match schools here
    },
    {
        $lookup: {
                      from:"schedules",
                      localField: id,
                      foreignField: id_schools_schedule,
                      as: "schedulesData"
                 }
    },
]);

Здесь вы получите данные примерно такие:

[
        {
            "name": "S1",
            "id": 1,
    "schedulesData": []
        },
        {
            "name": "S2",
            "id": 2,
    "schedulesData": [{
                "id_schedule": 58,
                "hour1": "13:00:00",
                "hour2": "20:00:00",
                "id_schools_schedule": 2
            }]
        },
        {
            "name": "S3",
            "id": 3,
    "schedulesData": [
            {
                "id_schedule": 59,
                "hour1": "06:30:00",
                "hour2": "22:30:00",
                "id_schools_schedule": 3
            }
        ]
        }
    ]
...