多个forEach js $ q

时间:2018-06-02 11:31:03

标签: javascript promise q

我有一个返回数据的函数,名为medicalService.getMedicalEvents()。像这样我捕获所有的医疗事件,现在每个医疗事件我需要将id传递给另一个功能以捕获该事件的所有与会者。 medicalService.getMedicalAttendees(idMedicalEvent)

当我收到每个活动的所有与会者时,我需要重复这个过程以获得所有目标。因此,对于每位与会者,我将使用函数medicalService.getTarget(accountId),accountId是与会者。

当我得到所有目标时,我需要为每个目标做另一个目标,以创建一个具有我需要的所有信息的对象。与第一个forEach中的eventName一样,attendeeName来自第二个forEach,target第三个来自每个。

我的问题与承诺有关,我如何能够使用承诺返回像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);

        })

0 个答案:

没有答案