2014-10-20 2 views
0

У меня есть этот код:defer.promise распечатывания объекта и не данные

app.factory('loadDependencies', function ($q, $timeout) { 

    return { 
     load: function() { 
      console.log("start 1"); 
      var defer = $q.defer(); 


      $timeout(function() { 
       defer.resolve({ resolve: "got dependencies" }); 
      }, 3000); 

      return defer.promise; 

     } 
    } 
}); 

Но проблема в том, что defer.promise не ждать, пока время ожидания не заканчивается, и это также просто распечатать объект properteis и а не данные, распечатывается:

Object { then: qFactory/defer/deferred.promise.then(), catch: qFactory/defer/deferred.promise.catch(), finally: qFactory/defer/deferred.promise.finally() } 

Я новичок в угловой и пытаюсь понять, что я сделал не так?

редактировать

Некоторые подробнее о том, что я пытался сделать.

У меня есть решение в пути, которое должно динамически загружать контроллеры и файлы css.

.when('/url', { 
     templateUrl: 'someview', 
     controller: 'somecontroller', 
     resolve: { 
      load: function (loadDependencies) { 
       loadDependencies.load(); // here i need to know get the result of what's inside $timeout of 'load' 
      } 
     } 

    }) 
+0

Как вы можете видеть в своем собственном примере, вы возвращаете обещание. То, что вы получаете, - это ожидаемое обещание, которое будет разрешено через 3 секунды. – cbass

+0

Есть ли способ отложить возврат до тех пор, пока не будет разрешено обещание? – emc

+0

Зачем вам. В чем его цель? – cbass

ответ

1

Это потому, что defer.promise не возвращает данные, а также не ждать, пока ваш timeout не будет завершена. Так что же вы делаете с ним назначить несколько обработчиков и ждать его, чтобы закончить/незачет:

function success(data) { 
    //this is called after defer.resolve({ resolve: "got dependencies" }); gets executed 
    //here you can access your data 
} 

function error(error) { 
    //this is called if the promise gets rejected 
} 

loadDependencies.load().then(success, error); 

Теперь, когда ваше обещание завершается, он автоматически вызывает один из этих обработчиков. Существует больше возможностей для применения обратных вызовов, таких как метод .finally(). Посмотрите на .

EDIT:

Просто вернуть обещание в вашем распознаватель:

.when('/url', { 
     templateUrl: 'someview', 
     controller: 'somecontroller', 
     resolve: { 
      load: function (loadDependencies) { 
       return loadDependencies.load(); // here i need to know get the result of what's inside $timeout of 'load' 
      } 
     } 
    }) 

Теперь контроллер будет называться после того, как обещание решить и угловой будет проходить разрешенное значение для него следующим образом:

app.controller("CtrlName", function($scope, load){ 
    //access your load value here 
}); 
+0

Но в чем разница? Вы сразу же получите обещание, верно? – cbass

+0

Да, но мне показалось, что ОП не получил «обещаний», поэтому я хотел их объяснить. Не зная подробностей, на данный момент невозможно дать конкретный ответ. –

+0

Я отредактировал вопрос, надеюсь, что он немного очистится от того, что я пытаюсь выполнить. – emc

Смежные вопросы