承诺链不;没有按预期工作
Promise chains don't work as expected
使用下面的代码,即使服务器返回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()
总是命中。
这是怎么回事?
这是因为您没有正确传播错误。您需要从createFailed
函数显式抛出异常或拒绝。
function createFailed(error) {
$log.error('XHR Failed for create: ' + error.data);
throw error;
// or
return $q.reject(error); // inject $q
}
因此,在您的情况下,由于您没有返回任何内容,因此假定它是从返回的promise中解析的,值为"undefined"。
相关文章:
- 承诺工作不正常
- 将异步工作流更改为承诺(蓝鸟)
- 承诺内部工作
- 在节点中,使用Q,使两个函数并行工作,但只等待第一个函数实现其承诺
- 承诺链不;没有按预期工作
- 无法获得蓝鸟承诺和猫鼬的 save() 在 node.js 中工作
- 回调/承诺无法正常工作
- 嵌套的 AJAX 调用列表和 $.when.apply - 延迟承诺无法正常工作
- 无法获得$q.所有工作都致力于多个承诺
- ngInit 不异步工作($q承诺)
- 为什么我的承诺不能在角度js中工作
- 我的承诺是否按预期工作
- jQuery推迟并承诺不能正常工作
- Node.js承诺q不能按预期工作
- “捕获”如何在原生承诺链中工作
- Nodejs承诺不会正常工作
- BluebirdJS承诺与jQuery不能正常工作
- 递延和承诺函数不能正常工作
- 解析,云,工作承诺不起作用
- 使用嵌套查询的云工作承诺