【发布时间】:2015-12-11 13:49:05
【问题描述】:
在创建这样的视图之前,我需要解决两个服务调用
$stateProvider
.state('parent', {
url: '/parent',
abstract: true,
resolve: {
resolveService: function($q, personService, jobService) {
return $q.all({
persons: personService.getPersons(),
jobs: jobService.getJobs()
})
}
}
})
.state('parent.child', {
url: '/child'
})
一个服务看起来像这样
function getPersons() {
var req = {
method: 'POST',
url: 'http://myPersonApi'
}
return $http(req)
.then(getPersonsComplete)
.catch(getPersonsFailed)
function getPersonsComplete(response) {
return response.data.persons;
}
function getPersonsFailed(error) {
//log error
return error;
}
}
我试了一下,但在dev 中出现CORS 错误,这是完全可以预料的,但奇怪的是即使$http 被拒绝,路由也得到了解决。
我进行了调试,发现我得到了一个HTTP status code 405,并且运行了getPersonFailed 函数,但仍然解决了$q.all。我尝试将其更改为 $q.reject,然后它按预期工作,但路线从未实现。
注意$http 调用的错误对象是status: 0 和statusText: ""
$http promise 的处理方式与$q 的处理方式不同吗?
【问题讨论】:
-
$q.all 接受一系列承诺,试试 $q.all([persons, jobs])...
-
@Hitmands
$q.all应该根据文档 docs.angularjs.org/api/ng/service/$q 处理数组或对象
标签: angularjs angular-ui-router angular-promise