使用下面的代码,即使服务器返回500,我的控制器的publish()
也会始终转到createCompleted()
。我当时的印象是,当从服务器返回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()
不打,服务createFailed()
总是命中。
这是怎么回事?
http://stackoverflow.com/q/25372160/1048572的可能重复。另请参阅[这些控制流程图](http://stackoverflow.com/a/24663315/1048572)和http://stackoverflow.com/q/26076511/1048572 – Bergi 2015-02-05 22:02:14