我正在编写一个角度服务,我将用它来获取和操作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
有没有办法阻止角度吹出日志?我也遵循这里的最佳做法吗?如果不是我应该改变什么?
答案 0 :(得分:1)
当你在catch块中throw
时,它不会拒绝承诺。它还会触发angular exception handler,默认情况下会记录异常(如果需要,可以替换默认实现)。如果您想在不触发异常处理程序的情况下拒绝来自拒绝块的承诺,则可以返回被拒绝的承诺。 e.g。
return $q.reject(response);
这就是说你的throw
响应阻止块是没有必要的。如果您只是将其删除(日志记录除外),则会发生完全相同的行为