我有点困惑如何做到这一点。这是我所拥有的:
resolve: {
objectiveDetailsExam: ['objectiveDetailService', 'subjectService',
function (objectiveDetailService: IObjectiveDetailService, subjectService: ISubjectService) {
objectiveDetailService.getObjectiveDetailsExam("/" + subjectService.subject.id)
.then((results): ng.IPromise<any> => {
return objectiveDetailService.getObjectiveDetailsObjective("/" + objectiveDetailService.examId);
});
}]
}
或者应该是在ObjectiveDetailService.getObjectiveDetailsExam之前带有
return
的: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);
});
}]
}
两者实际上似乎都可以正常工作,并且随着调用快速执行,我看不到哪个是正确的。
有人可以建议我在解析中需要返回一到两个返回真还是假的返回吗?
最佳答案
在第一个的“ body”中(或传递给then
的函数中)返回第二个promise将通过第一个管道将第二个管道输送。两者结合产生的承诺结果将是后一个的结果。
我很可能会喜欢后面的示例。在第一个示例中,您仅返回undefined
,这意味着无法从外部知道何时真正兑现了您的承诺。
如果将其返回,则可以将其取回并将其通过管道传递给某些代码,仅在完成(或失败)时才能执行。这就是承诺的重点。
但是,说实话,很难弄清楚您的代码实际在做什么,因此在这种情况下,返回某些内容实际上是没有用的。以防万一,如果两个都可行,我仍然会退还它。即使您没有直接访问返回的诺言的机会,也可能会在幕后使用它。在这种情况下,最好的办法是检查框架/库如何使用此值。
如果您想了解有关诺言以及如何正确使用诺言的更多信息,请here is a good article。