使用下面的代码,我的控制器的publish()
将始终转到createCompleted()
,即使服务器返回500.我的印象是{400}将在400时执行或者从服务器返回500个代码。
//在服务中
catch()
//在控制器中
function create(item) {
return $http
.post(api, item)
.then(createCompleted)
.catch(createFailed);
function createCompleted(response) {
return response.data;
}
function createFailed(error) {
$log.error('XHR Failed for create: ' + error.data);
}
}
虽然控制器的function publish(item) {
item.published = true;
return itemService.create(item)
.then(createCompleted)
.catch(createFailed);
function createCompleted(response) {
alertService.add('success', 'success.');
$state.go('^');
}
function createFailed(error) {
alertService.add('error', 'failed');
}
}
没有命中,但服务createFailed()
始终会点击。
这里发生了什么?
答案 0 :(得分:2)
那是因为你没有正确地传播错误。您需要抛出异常或明确拒绝createFailed
函数。
function createFailed(error) {
$log.error('XHR Failed for create: ' + error.data);
throw error;
// or
return $q.reject(error); // inject $q
}
因此,在您的情况下,由于您没有返回任何内容,因此假定从返回的promise中使用值" undefined"来解析它。