简体   繁体   English

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

[英]Service call in for loop angular js $q, promise

Service call in for loop angular js $q, promise 服务调用for循环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 is 服务电话是

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

Question: $scope.weeklyData.length = 0 outside for loop. 问题: $scope.weeklyData.length = 0外的循环。 Why and how to handle this in promises? 为什么以及如何在诺言中处理这一问题?

Serivce call 私人电话

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;***
    }

While calling above service, create a variable promise=[]; 在调用上述服务时,创建一个变量promise = [];。 push all repsonses from service call, and resolve them. 推送服务呼叫中的所有回复,并加以解决。

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);
        }

Now resolve using $q.all() 现在使用$ 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);
        });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM