Angular $ http最佳做法

时间:2016-03-10 15:01:02

标签: angularjs angular-http

我正在编写一个角度服务,我将用它来获取和操作SharePoint列表/库中的数据。我正在尝试使用$ http promises的最佳实践,但我无法找到实现我想要的最佳方法。这是我服务中的一项功能:

this.GetListItemById = function (webUrl, listName, itemId, loading) {
    var url = webUrl + "/_vti_bin/listdata.svc/" + listName + "(" + itemId + ")";

    return $http({
        url: url,
        method: 'GET',
        processData: false,
        headers: { "Accept": "application/json;odata=verbose" },
    }).then(function SuccessCB(response) {
        return response.data.d;
    }).catch( function FailureCB(response) {
        throw response;
    });
};

然后我在控制器中使用它:

$scope.GetListItemById = function (webUrl, listName, itemId) {
    SPListUtility.GetListItemById(webUrl, listName, itemId)
        .then(function success(data) {
            console.log(JSON.stringify(data));
            $scope.animateAlert("myAlert", "alertText", "Item: " + data.Title + " loaded", "success");
        }).catch( function failure(error) {
            console.log("Error " + error.status + ": " + error.statusText);
            $scope.animateAlert("myAlert", "alertText", "Error " + error.status + ": " + error.statusText, "danger");
        });
};

这是按预期工作的,它返回项目数据,如果它在服务器上找到,如果不是那么404气泡到我的控制器,我的错误警报被调用并记录到控制台。我的问题是它保持泡沫并且角度捕获语句被触发,导致日志中的以下内容:Console log image

  

有没有办法阻止角度吹出日志?我也遵循这里的最佳做法吗?如果不是我应该改变什么?

1 个答案:

答案 0 :(得分:1)

当你在catch块中throw时,它不会拒绝承诺。它还会触发angular exception handler,默认情况下会记录异常(如果需要,可以替换默认实现)。如果您想在不触发异常处理程序的情况下拒绝来自拒绝块的承诺,则可以返回被拒绝的承诺。 e.g。

return $q.reject(response);

这就是说你的throw响应阻止块是没有必要的。如果您只是将其删除(日志记录除外),则会发生完全相同的行为