服务调用for for angular angular js $ q,promise

时间:2017-12-08 05:19:37

标签: javascript angularjs

服务调用for for angular angular js $ q,promise

   var FULLWEEKDAYS = [MONDAY, TUESDAY ... SATURDAY]
    for (var i=0; i< FULLWEEKDAYS.length; i++) {
                var reqParams = {
                    weekday: FULLWEEKDAYS[i],
                    teacherId : 97
                }
                TimetableService.getTeachersOccupancy(reqParams, function (data) 
    {
                    if (data) {
                        $scope.weeklyData.push(data);
                    }
                }, function (err) {
                    //message.error('Timetable', err.data);
                });
            }

Serivice call

function getTeachersOccupancy(data, successFunction, errorFunction) {            
var params = $.param(data);
        AjaxHandlerFactory.AjaxGet(BASETIMETABLEPATH + 'occupancy?' + 
params, {}, function (response) {
            successFunction(response.data);
        }, function (error) {
            errorFunction(error);
        });
    }

问题: $scope.weeklyData.length = 0外面的循环。为什么以及如何在承诺中处理这个问题?

1 个答案:

答案 0 :(得分:0)

服务电话

function getTeachersOccupancy(data, successFunction, errorFunction) {
        // /SchoolAdminWS/services/schools/{schoolCd}/timeTable/occupancy?classroomId={classroomId}&date={YYYY-MM-DD}
        var params = $.param(data);
        ***var deferred = $q.defer();***
        AjaxHandlerFactory.AjaxGet(BASETIMETABLEPATH + 'occupancy?' + params, {}, function (response) {
            successFunction(response.data);
            ***deferred.resolve(response.data);***
        }, function (error) {
            errorFunction(error);
            ***deferred.reject(error);***
        });
        ***return deferred.promise;***
    }

在调用上述服务时,创建一个变量promise = [];推送来自服务电话的所有回复,并解决它们。

var promises = [];
        for (var i=0; i< FULLWEEKDAYS.length; i++) {
            var reqParams = {
                weekday: FULLWEEKDAYS[i],
                teacherId : vm.employeeProfileId
            }
            var promise = TimetableService.getTeachersOccupancy(reqParams, function () {}, function () {});
            promises.push(promise);
        }

现在解决使用$ q.all()

$q.all(promises).then(function(value) {
            vm.weeklyData = value;
            console.log(vm.weeklyData);
            setTeacherOccupancyData(value);
            vm.isSearch = true;
        }, function (reason) {
            console.log("Promise Rejected:" + reason);
        });