AngularJS-第一次运行.service计划发送数据,但没有显示,第二次运行,没有发送数据的计划,但显示了一些

AngularJS - First run of .service plans to send data, but none shows, second run, no plans to send data, but some shows

本文关键字:数据 显示 计划 运行 第二次 service AngularJS- 第一次      更新时间:2023-09-26

我的控制器中有以下调用:

.controller('OverviewCtrl', function($http, $rootScope, $scope, tipService, alertService) {
    var user = $rootScope.sessionUser;
    alertService.getAlert(user).then(function(payload) {
        $scope.newAlerts = payload;
        console.log('got new alerts: ' + $scope.newAlerts);
        $rootScope.unreadAlerts = $scope.newAlerts.length;
    });
});

这是警觉性服务:

.service('alertService', function($rootScope) {
var getAlert = function(user) {
    var newAlerts = [];
    //function calling business logic for eligible alerts
    //set up database query (using Parse)
    query.equalTo("user", user);
    return query.find({
        success: function(results) {
            var oldAlerts = results;
            for (var i=0; i<alerts.length; i++) {
                var isNew = true;
                for (var j=0; j<oldAlerts.length; j++) {
                    if (alerts[i].get("callout") === oldAlerts[j].attributes.callout) {
                        isNew = false;
                    }
                }
                if (isNew) {
                    newAlerts.push(alerts[i]);
                    alertToSave = alerts[i];
                    alertToSave.save(null, {
                        success: function(alert) {
                            console.log('successfully saved alert: ' + alert.get("callout"));
                        },
                        error: function(error) {
                            console.log('Failed to save new object, with error code: ' + error.message);
                        }
                    });
                }
            }
            console.log('about to return new alerts: ' + newAlerts);
            return newAlerts;
        },
        error: function(error) {
            console.log("Error: " + error.code + " " + error.message);
        }
    });
};
return {
    getAlert: getAlert
};
});

奇怪的是,第一次运行时(假设实际上有两个新警报),console.log显示:

即将返回新警报:[object object],[object object]

收到新警报:

但第二次运行时,console.log显示:

即将返回新警报:

获得新警报:[object object],[object object]

怎么回事?我在这里错过了什么?

更新

无论出于何种原因,该服务返回的是查询结果,而不是newAlerts数组。作为一种变通方法,我只是将此代码移动到控制器中的一个函数中,并保留用于在服务中查找合格警报的业务逻辑。

我没有看到任何地方定义了警报阵列,也没有向警报阵列添加任何内容。因此,每次将结果/oldAlerts与警报阵列进行比较时,都不会发生任何变化。

我不知道为什么控制器直到第二轮才看到任何东西。尝试使用调试器逐行遍历代码,因为这会让您更好地了解正在发生的事情

无论出于何种原因,服务返回的是查询结果,而不是newAlerts数组。作为一种变通方法,我只是将此代码移动到控制器中的一个函数中,并保留用于在服务中查找合格警报的业务逻辑。