Мне также не нравится использовать функцию для обработки свойства, которое было разрешено снова и снова в каждом контроллере и службе. Кажется, я не одинок: D
Не пытайтесь получить результат с обещанием как переменной, конечно, никак. Но я нашел и использовал нижеприведенное решение, чтобы получить доступ к результату в качестве свойства.
Во-первых, написать привести к свойству вашей службы:
app.factory('your_factory',function(){
var theParentIdResult = null;
var factoryReturn = {
theParentId: theParentIdResult,
addSiteParentId : addSiteParentId
}
return factoryReturn;
function addSiteParentId(nodeId) {
var theParentId = 'a';
var parentId = relationsManagerResource.GetParentId(nodeId)
.then(function(response){
factoryReturn.theParentIdResult = response.data;
console.log(theParentId); // #1
});
}
})
Теперь мы просто должны убедиться, что метод addSiteParentId всегда быть решены, прежде чем получить доступ к собственности theParentId. Мы можем добиться этого, используя несколько способов.
затем в контроллере и других услуг, используемых в маршрутизаторе, просто позвоните your_factory.theParentId, чтобы получить вашу собственность. Referce здесь для получения дополнительной информации: http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx
Используйте «запустить» метод приложения, чтобы решить вашу службу.
app.run (функция (your_factory) {your_factory.addSiteParentId();})
Вводят его в первом контроллере или услуг контроллера. В контроллере мы можем вызвать все необходимые сервисы init. Затем все остаются контроллерами, так как дети основного контроллера могут получить доступ к этому свойству, как обычно.
Выбор пути зависит от вашего контекста, зависит от объема вашей переменной и частоты чтения вашей переменной.
ли вы трудитесь искать на существующие вопросы по этому поводу? – Amit
Нет - вы не можете - любые операции, которые вы хотите сделать с 'response', должны выполняться в обработчике' .then() '. Вы не можете писать асинхронный Javascript в синхронном стиле! – slugonamission
Речь идет не о возврате данных из обещания. Второй 'console.log' происходит до того, как обещание устанавливает переменную theParentId, потому что обещание является асинхронным, а' console.log' - нет. – JordanHendrix