控制器上的Angular .then()错误地从服务返回相同的数据

时间:2015-11-08 23:26:26

标签: angularjs promise

我是Angular的新手,我使用一些功能将数据发布到端点 - 我完全可以控制的端点。它是一个非常简单的端点,具有CRUD功能,允许我与"客户"用于教育目的的实体。

我有部分视图,基本上列出了所有客户。在每一行上都有一个删除按钮,允许我删除该客户。删除客户时,会向端点发送请求。然后,端点将检查客户是否为" admin",如果是,则返回JSON响应,其中显示"您无法删除管理员"否则,删除客户并发回" 34;客户删除" JSON响应。

收到服务器的响应后,角度应用程序应根据响应数据执行逻辑。端点正在按预期工作。但是,我得到了一些奇怪/意外的结果。

以下是我的代码:

在" SecretsController",我有以下内容:

   $scope.deleteUser = function (userName, $event) {
                    credentialsService.removeRegistredUser(userName).then(function (response) {
                        if (response.data.Feedback === "Error") {
                            $rootScope.currentStatus = "There was a error raised: " + response.data.Message;
                        } else {
                            $rootScope.currentStatus = "User sucessfully removed.";
                            var currentRow = $event.target.closest("tr");
                            $(currentRow).fadeOut(1500, function () {
                                currentRow.remove();
                            });
                        };
                        fireResponseToGui();
                    }, function (error) {
                        $rootScope.currentStatus = "Invalid request: " + error.status + ". The response is: " + error.statusText;
                        fireResponseToGui();
                    });
                };

并在:

             var deffered = $q.defer();

            var credentialsServiceFactory = {};

credentialsServiceFactory.removeRegistredUser = function (userMail) {
                $http.post(registratedUsersEndpoint + apiDelete + userMail + "&token=" + token)
                    .then(function (response) {
                        deffered.resolve(response);
                    }, function (error) {
                        deffered.reject(error);
                    });

                return deffered.promise;
            };

还有问题。在使用console.log()进行一些检查后,"返回deffered.promise"虽然服务中的响应对象不同,但服务中的行似乎返回完全相同的结果。现在有人在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

为了详细说明我的评论,您在deferred中返回的removeRegistredUser对象在函数外部声明,因此将比最初使用的时间更长。我不完全确定,但我猜你不能resolve不止一次承诺。

只需返回$http服务

创建的承诺
return {
    removeRegistredUser: function(userMail) {
        return $http.post(registratedUsersEndpoint + apiDelete + userMail + "&token=" + token);
    }
};