2015-09-02 3 views
0

Я немного смущен, как это сделать. Вот что у меня есть:возвращение обещания, которое возвращает обещание?

resolve: { 
    objectiveDetailsExam: ['objectiveDetailService', 'subjectService', 
     function (objectiveDetailService: IObjectiveDetailService, subjectService: ISubjectService) { 
     objectiveDetailService.getObjectiveDetailsExam("/" + subjectService.subject.id) 
      .then((results): ng.IPromise<any> => { 
       return objectiveDetailService.getObjectiveDetailsObjective("/" + objectiveDetailService.examId); 
          }); 
        }] 
     } 

или оно должно быть таким, которое имеет return перед objectiveDetailService.getObjectiveDetailsExam:

resolve: { 
    objectiveDetailsExam: ['objectiveDetailService', 'subjectService', 
     function (objectiveDetailService: IObjectiveDetailService, subjectService: ISubjectService) { 
     return objectiveDetailService.getObjectiveDetailsExam("/" + subjectService.subject.id) 
      .then((results): ng.IPromise<any> => { 
       return objectiveDetailService.getObjectiveDetailsObjective("/" + objectiveDetailService.examId); 
          }); 
        }] 
      } 

Либо на самом деле, кажется, работает, и как вызов выполняется быстро, я не могу увидеть, который верно.

Может кто-нибудь посоветует мне нужно одно или два возвращения в решении, которое должно возвращать true или false?

+0

Ваше название звучит как обман http://stackoverflow.com/questions/32168194/fulfill-dont-resolve-promise-with-another-promise. Кажется, вы действительно спрашиваете о 'then' * callback *, который возвращает обещание? – Bergi

ответ

3

Возврат второго обещания в «корпусе» первого (или в функции, переданной в then), будет передавать первый со вторым. Результатом обещания, полученного в результате сочетания обоих, будет результат более позднего.

Я бы предпочел более поздний пример. В первом примере вы возвращаете только undefined, что означает, что нет никакого способа узнать, извне, когда ваше обещание действительно разрешено.

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

Однако, честно говоря, трудно понять, что делает ваш код на самом деле, так что что-то может на самом деле быть бесполезным в данном конкретном случае. На всякий случай, если обе работы, я все равно верну его. Даже если у вас нет прямого доступа к возвращенному обещанию, он все равно может использоваться позади сцены. В этом случае лучше всего было бы проверить, как это значение используется вашей инфраструктурой/библиотекой.

Если вам интересно узнать больше о обещаниях и порядке их правильного использования, here is a good article.

+0

Продвинутый пользователь для ссылки на статью – marapet

Смежные вопросы