使用下面的代碼,即使服務器返回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