我试图理解我工厂中这两个http调用之间的区别:
One: function(code) {
return $http.get('api/team/' + code)
.then(function(resp) {
return resp.data;
});
}
}
和
Two: function(code) {
var promise = $http.get('api/team/' + code);
promise.then(function(resp) {
return resp.data;
});
return promise;
}
如果我在Two
中的resolve
使用config
:
resolve: {
testt: ['$route','MyService',
function($route, MyService) {
return MyService.Two($route.current.params.code);
}]
}
然后我可以看到ng-view
中的数据。如果我使用One
,我就会看不到ng-view
中的数据。
我的控制器:
.controller('TeamDetailsCtrl',
['MyService','testt',
function(MyService,testt) {
var self = this;
self.team = testt.data;
}]);
那么,有什么区别? 最诚挚的问候
答案 0 :(得分:2)
一:完成$http.get()
后,它将解析并继续进入then
。这将返回另一个promise,填充then函数result.data
的结果。一个人回复第二个承诺。
二:从$http.get()
返回原始承诺,结果为result
,(其中您没有将结果转换为result.data)。两个语法的正确语法可能是:
Two: function(code) {
var promise = $http.get('api/team/' + code);
var promise2 = promise.then(function(resp) {
return resp.data;
});
return promise2;
}
答案 1 :(得分:1)
One
会返回一个承诺,最终会返回resp.data
。
如果您在控制器中使用One
,resp.data === testt
。 testt.data
无效,因为resp.data.data
不起作用。
如果您想使用One
,请将self.team = testt.data
更改为self.team = testt
。