Я пытаюсь понять разницу между этими двумя вызовами 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;
}]);
Итак, в чем разница? С наилучшими пожеланиями
Один: Когда $http.get()
будет сделано, это будет решать и продолжаться в 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;
}
One
возвращает обещание, которое в конечном итоге вернет resp.data
.
Если вы используете One
, resp.data === testt
в своем контроллере. testt.data
не работает, потому что resp.data.data
не работает.
Если вы хотите использовать One
, измените self.team = testt.data
на self.team = testt
.
{teamName: 'team', teamMembers: [member1, member2]}
). В двух вы возвращаете результат (например:{data: {teamName: 'team', teamMembers: [member1, member2]}}
. Измените наself.team = testt;
- один будет работать, но два не получится.