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);
话虽这么说,您的 throw
ing 响应的 catch 块不是必需的。如果您只是将其删除(日志记录除外),则会发生完全相同的行为
我正在编写一个 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);
话虽这么说,您的 throw
ing 响应的 catch 块不是必需的。如果您只是将其删除(日志记录除外),则会发生完全相同的行为