我有这段代码:
app.factory('clients', ['$http', function ($http) {
var _getClient = function (clientId, callback) {
callback = callback || function () {};
$http({
method: 'GET',
url: '/simple_crm/web/api.php/client/'+clientId
}).then(function (data) {
callback(data);
}, function (error) {
callback(error);
});
};
return {
getClient: _getClient
};
}]);
并在控制器中
app.controller('ClientDetailCtrl', ['$scope', 'clients', '$routeParams', function ($scope, clients, $routeParams) {
$scope.user = {};
clients.getClient($routeParams.clientId,
function (data) {
//The block executes clientId is correct
$scope.user = data;
if (404 === data.status) {
//The block executes when Id does not exist and status page is 404
}
}
);
}]);
此代码正常工作 - 隐藏/显示页面上的div块,但是可以隔离代码块错误,例如:
clients.getClient($routeParams.clientId,
function (data) {
//clientId is correct
$scope.user = data;
},
function (data) {
if (404 === data.status) {
//clientId does not exist
}
}
);
有什么可能吗?最佳做法是什么?
答案 0 :(得分:0)
此代码正常工作 - 隐藏/显示页面上的div块,但是 可以隔离代码块错误,例如:
您可以为错误定义另一个回调,并在错误
时调用它var _getClient = function (clientId, successCallback, errorCallback) {
if (success) {
successCallback();
}
if (error) {
errorCallback()
}
}
有什么可能吗?最佳实践是什么
最好和最简单的方法是在工厂中返回此$ http承诺,这样您就可以在控制器中使用所有$ http promise方法(。then()
或.success()
或。{{1 })。您将只使用一个承诺,如果需要,它可以与另一个承诺链接,而不是被回调打破。
工厂:
error()
控制器:
var _getClient = function (clientId) {
return $http({
method: 'GET',
url: '/simple_crm/web/api.php/client/'+clientId
});
};