Angular $http 最佳实践

Angular $http best practices

我正在编写一个 angular 服务,我将使用它从 SharePoint lists/libraries 获取和操作数据。我正在尝试使用 $http 承诺的最佳实践,但我无法找到实现我想要的目标的最佳方法。这是我服务中的一项功能:

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");
        });
};

这是按预期工作的,它 returns 如果在服务器上找到了项目数据,如果没有,则 404 冒泡到我的控制器,我的错误警报被调用并记录到安慰。我的问题是它不断冒泡并且 angular catch 语句被触发,这导致日志中出现以下内容:Console log image

Is there a way to stop angular from blowing out the log? Also am I following best practices here? If not what should I change?

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

return $q.reject(response);

话虽这么说,您的 throwing 响应的 catch 块不是必需的。如果您只是将其删除(日志记录除外),则会发生完全相同的行为