Несколько обещаний внутри нескольких forEach js $ q - PullRequest
0 голосов
/ 02 июня 2018

У меня есть функция, которая возвращает данные, которая называется medicalService.getMedicalEvents().Таким образом, я отслеживаю все медицинские события, и теперь для каждого медицинского события мне нужно передать id другой функции, чтобы перехватить всех участников этого события.medicalService.getMedicalAttendees(idMedicalEvent)

когда я собрал всех участников для каждого события, мне нужно повторить процесс, чтобы получить все цели.Таким образом, для каждого участника я получу функцию medicalService.getTarget(accountId), accountId - это идентификатор участника.

, когда я получу все цели, которые мне нужно будет сделать для каждого, чтобы создать один объект со всей необходимой мне информацией.Как и eventName из первого forEach, attendeeName из второго forEach и target третьего forEach.

Мой вопрос связан с обещаниями, как я могу с обещаниями быть в состоянии вернуть объект, созданный таким образом?call.mainObj?

medicalService.getMedicalEvents().then(function(resp) {
      call.medicalEvents = resp.data;
      call.numberEvents = call.medicalEvents.length;

      call.medicalEvents.forEach(function(event) {
          var deferred = $q.defer();
          var idMedicalEvent = event.Id.value

          medicalService.getMedicalAttendees(idMedicalEvent).then(function(resp2) {
            call.allAttendeesForEvent = resp2.data;

            call.allAttendeesForEvent.forEach(function(attendee) {
              var accountId = attendee.Account_vod__c.value;

              medicalService.getTarget(accountId).then(function(resp3) {
                call.targetInfo = resp3.data;

                call.targetInfo.forEach(function(target) {
                  var targetName = "C";
                  if (target.SRV_INT_Team_target__c.value !== undefined && target.SRV_INT_Team_target__c.value !== "") {
                    targetName = target.SRV_INT_Team_target__c.value;
                  }
                  call.mainObj.push({
                    eventName: event.Name.value,
                    attendee: attendee.Name.value,
                    target: targetName,
                    speciality: attendee.SRV_Specialty__c.value
                  });
                })
              })
            })
          })
          medicalEventsDeferred.resolve(resp);
        },
        function(resp) {
          medicalEventsDeferred.reject(resp);

        })
...