我的状态定义如下:
.state('list', {
url: '/list',
controller: 'ctrl',
resolve: {
data: ['DataService', function(DataService) {
return DataService.getList();
}]
}
})
DataService的getList发出http请求:
var httpRequest = $http(categoryRequest);
httpRequest.then(function (response) {
return response.data;
})
.catch(function (error) {
console.log('could not get categories from server');
});
return httpRequest;
在控制器中我只是将列表分配给它的列表属性:
function ctrl(data) {
this.list = data.data;
}
问题:
无论我成功回复http请求,我总是得到国家提供商解决的整个响应。
所以我必须在控制器中执行 data.data 以从响应中获取数据。
问题:
致以最诚挚的问候,
答案 0 :(得分:1)
var httpRequest = $http(categoryRequest);
所以httpRequest是Promise<Response>
httpRequest.then(function (response) {
这创造了另一个承诺,但这个新承诺没有分配给任何东西。
return httpRequest;
这会返回原始Promise<Response>
。
你想要
httpRequest = httpRequest.then(function (response) {
或者只是
return httpRequest.then(function (response) {
所以你返回的是新的承诺。
为了给您一个更简单的模拟示例,您的代码类似于
var a = 1;
a + 1;
return a;
返回1,而不是2。
要返回2,您需要
var a = 1;
a = a + 1;
return a;
或
var a = 1;
return a + 1;
答案 1 :(得分:0)
有两个问题。首先,服务返回原始的httpPromise而不是从原始promise中派生的promise。其次,错误处理程序将拒绝转换为成功。
var httpRequest = $http(categoryRequest);
//httpRequest.then(function (response) {
var derivedPromise = httpRequest.then(function onSuccess(response) {
//return to chain data
return response.data;
}).catch(function onReject(error) {
console.log('could not get categories from server');
//IMPORTANT to avoid conversion
throw error;
//OR
//return $q.reject(error);
});
//return httpRequest;
return derivedPromise;
promise的.then
方法返回从原始promise中派生的新promise。它并没有改变最初的承诺。
一个常见问题是来自拒绝处理程序的throw
或return $q.reject
语句的遗漏。没有此类语句的函数会返回undefined
的值,该值将转换拒绝成功,并将其解析为undefined
。