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



我是Angular的新手,我正在使用一些功能将数据发布到端点——我可以完全控制这个端点。它是一个非常简单的端点,具有CRUD功能,使我能够与"客户"实体一起工作以达到教育目的。

我有一个局部视图,基本上列出了所有客户。每一行都有一个删除按钮,允许我删除该客户。删除客户时,会向端点发送一个请求。然后,端点将检查客户是否为"admin",如果是,则返回一个JSON响应,上面写着"You cannot delete a admin",否则,删除客户并返回"customer deleted"JSON响应。

在接收到来自服务器的响应后,angular应用程序应该根据响应数据执行逻辑。端点正在按预期工作。然而,我得到了一些奇怪/出乎意料的结果。

以下是我的代码:

在"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()进行了一些检查后,服务中的"return deffered.proped"行似乎返回了完全相同的结果,尽管服务中的响应对象不同。现在有人知道我做错了什么吗?

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

只需返回$http服务创建的承诺

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

最新更新