【问题标题】:Return an API response from a Promise.then() in AngularJS从 AngularJS 中的 Promise.then() 返回 API 响应
【发布时间】:2019-08-05 08:08:27
【问题描述】:

我是 AngularJS 的新手,想在 AngularJS 中编写一个函数,尝试删除一个用户。成功时它应该返回一个布尔值,确定他是否被成功删除。

无论如何,从promise中提取的结果总是返回true,即使Api-Response为false。我尝试提取此处所写的响应:Return value from a promise in Angular。我也尝试了其他链接,但它们都没有真正帮助我解决我的问题。

user.controller.js:

deleteUser(user) {

    const self = this;

    self.userActionPromise = self.userService.deleteUser(user.id).then(deleted => {
        if (deleted) {
            self.messagesService.successMessage('user.DELETE_SUCCESS');
            self.loadUsers();
        } else {
            self.messagesService.errorMessage('user.DELETE_FAILURE');
        }
    });
}

user.rest.service.js:

self.user = $resource(config.restServerUrl + 'users/:id', {id: '@id'}, {
    delete: {method: 'DELETE'}
});

deleteUser(id) {
    return this.user.delete({id: id}).$promise.then(deleted => {
        return !!deleted;
    });
}

【问题讨论】:

    标签: javascript angularjs spring-boot


    【解决方案1】:

    结果

    return this.user.delete({id: id}).$promise.then(deleted => {
      return !!deleted;
    })
    

    请求完成时总是返回 true。

    如果你想覆盖失败结果:

    return this.user.delete({id: id}).$promise.then(deleted => {
      return deleted;
    }, function (error) {
      return error;
    })
    

    服务器返回错误时将执行第二个函数 https://www.baeldung.com/spring-boot-custom-error-page

    Http 响应 statusCode 应该说出现错误,例如 500 (https://developer.yahoo.com/social/rest_api_guide/http-response-codes.html)。 当您返回状态码 200 和结果 false 时,它只是告诉 angularjs 请求已成功完成,结果为 false

    【讨论】:

    • 但是有没有办法返回 API 响应(真或假)?后端不会抛出错误,因为它会检查用户是否可以被删除。如果他可以被删除,则返回 true 并删除用户,否则仅返回 false。我需要得到这个结果。
    • 根据我对API的理解,当UI请求删除用户但用户没有被删除时,API应该返回错误
    • developer.yahoo.com/social/rest_api_guide/… for DELETE 操作答案可以是“400 Bad Request”、“403 Forbidden”、“404 Not Found”等
    • 在做了一些进一步的研究之后,我发现,DELETE 不能像我想要的那样返回一个布尔值。所以你的方式似乎是唯一可能的方式。我会把答案标记为正确的。
    猜你喜欢
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多