b_e_m
@b_e_m
Front-End Dev

Почему Resolve возвращает пустой Promise?

Кусок с Factory
order.getOrder = function(id) {
 		var deferred = $q.defer();
 		$http.get('/order-info/id' + id).success(function(order) {
 			deferred.resolve(order);
 		}).error(function(data, status, headers, config) {
 			deferred.reject(status);
 		});
 		console.log(deferred.promise);
 		return deferred.promise;
 	};

Вот и сам роутинг :
.state('order', {
      url: "/order/id{id}",
      views: {
        'content': {
          templateUrl: "/modules/order/order_details.html",
          controller: "orderCtrl",
          resolve: {
            orderService: 'orderService',
            order: ['$stateParams', 'orderService', function($stateParams, orderService) {
              var orderId = $stateParams.id;
              return orderService.getOrder(orderId);
            }]
          }
        },
      }
    })


В чем может быть пробелма?
  • Вопрос задан
  • 471 просмотр
Пригласить эксперта
Ответы на вопрос 1
uaKorona
@uaKorona
Front-End разработчик
Проблема в том, что вам немного глубже нужно разобраться с промисами в ангуляре

then всегда возвращает новый promise

Взглянем на пример:
function asyncFunction() {  
  var deferred = $q.defer();  
  doSomethingAsync().then(function(res) {  
    res = asyncManipulate(res);
    deferred.resolve(res);
  }, function(err) {
    deferred.reject(err);
  });

  return deferred.promise; 
}


Здесь бессмысленно создается новое обещание $q.defer(). Автор кода явно не знал, что then итак вернет promise. Чтобы улучшить код, просто вернем результат then:
function asyncFunction() { 
  return doSomethingAsync().then(function(res) {  
    return asyncManipulate(res);
  }); 
}


Ссылка на полную статью
https://habrahabr.ru/post/221111/

П.С. вывидите в консоль что у вас приходит в order - может он пустой ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы