【发布时间】:2016-01-13 01:48:20
【问题描述】:
我想要达到的目的是这样的:
- 调用我的服务以检索与医生相关的预约类型(类型数量不固定)中的所有预约
- 如果有 3 种约会类型,则将进行 3 次异步调用
- 在所有 3 个 Promise 都已解决后,使用 $q.all() 返回一个 Promise
约会服务
this.getAllDoctorAppointments = function (doctor, appointmentTypeArray) {
var promises = [];
angular.forEach(appointmentTypeArray, function (appointmentType) {
var defer = $q.defer();
$http.get('/appointments/?doctorName=' + doctor + '&apptType=' + appointmentType)
.success(function (listOfAppointments) {
defer.resolve(listOfAppointments);
promises.push(defer.promise);
});
});
return $q.all(promises);
};
在我的控制台日志中,约会类型返回 [ ]。 发生这种情况是因为即使在进行 3 次异步调用之前就返回了空的“promises”数组。我对承诺的概念还很陌生,解决这个问题的最佳方法是什么?谢谢!
$scope.getAllDoctorAppointments = function (doctor, appointmentTypeArray) {
appointmentService.getAllDoctorAppointments(doctor, appointmentTypeArray)
.then(function (appointmentType) {
//could take in any number. hardcoded 3 just for testing.
console.log(appointmentType)
angular.forEach(appointmentType[0], function (xRay) {
$scope.xRayAppts.events.push(xRay);
});
angular.forEach(appointmentType[1], function (ctScan) {
$scope.ctScanAppts.events.push(ctScan);
});
angular.forEach(appointmentType[2], function (mri) {
$scope.mriAppts.events.push(mri);
});
});
};
【问题讨论】:
-
不需要
var defer,但同时如果你没有在成功回调中推送承诺,它会起作用......太晚了......把它推到@987654324之外@