Разница между var = $ http и return $ http

0

Я пытаюсь понять разницу между этими двумя вызовами 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
resolve

2 ответа

2
Лучший ответ

Один: Когда $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;
 }
  • 0
    Хорошо, но почему разрешение работает с двумя, но не с одним?
  • 2
    В одном вы возвращаете result.data (например: {teamName: 'team', teamMembers: [member1, member2]} ). В двух вы возвращаете результат (например: {data: {teamName: 'team', teamMembers: [member1, member2]}} . Измените на self.team = testt; - один будет работать, но два не получится.
Показать ещё 6 комментариев
1

One возвращает обещание, которое в конечном итоге вернет resp.data.

Если вы используете One, resp.data === testt в своем контроллере. testt.data не работает, потому что resp.data.data не работает.

Если вы хотите использовать One, измените self.team = testt.data на self.team = testt.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню