У меня есть пара вопросов по асинхронным функциям в угловом. Я хочу, чтобы моя служебная функция могла возвращать данные, получаемые с помощью $ http, и использовать эти данные в другой функции. Позвольте мне продемонстрировать с текущим кодом:асинхронные вызовы в angularjs
dashboard.servicesModule.service('SubscriptionService', function ($http, $q) {
this.getImportantData= function (param1, param2) {
var url = "my/url/with/parameters?param1=param1¶m2=param2";
$http.get(url).then(function(response){
console.log("response");
console.log(response.data); // < --- this actually shows the data i need!!
return response.data.vsyData; <--- however, this returns undefined
}, function(error){
// some error thingy just in case
});
};
this.getSomeFunctionality = function(param1, param2, param3){
var importantdata= this.getImportantData(param1, param2);
// do some filtering on the data with the purpose of returning only what i need
console.log(importantdata); <--- undefined
};
this.getEvenMoreFunctionality = function(param1, param2, param3){
var importantdata= this.getImportantData(param1, param2);
// reusing getImportantData again!
console.log(importantdata); <--- undefined
};
});
Так что я пытался все виды вещей (например, this и this) и некоторые изобретения мои собственные. Но начинает казаться, что нет способа использовать данные из $ http.get где-нибудь еще, а затем в своем обратном вызове. И так как мне нужен endresult в моем контроллере, кажется, что нет другого пути, а затем выполнить $ http.get (url) .success (... некоторая логика здесь) в моем контроллере и выполнять фильтрацию и другие манипуляции там.
Однако, я прочитал here и я цитирую:
Наш контроллер должен быть почти полностью агностиком о том, как данные извлечены и отправлены, и должны быть заинтересованы только с общим действия отправки и получения данные в службу и из нее.
Я интерпретирую это как следующее: мой контроллер должен запросить службу для данных, которые мне нужны, и служба должна убедиться, что она дает данные в правильной форме.
Самый важный вопрос: как я могу сделать вышеуказанный код делать то, что он должен делать, или это было бы невозможно?
И должен ли я выполнять свою бизнес-логику в своем контроллере? Потому что here, in the angular docs Я в основном читал, что вы должны вести бизнес-логику в своем контроллере, но не фильтровать ...
Возможно, это очевидно, но ... Я угловатый новичок :-). Спасибо!
Вы не присвоить значение 'dates' в любом месте, так что это явно не определено. – muenchdo
@muenchdo ваши права, я хотел быть слишком быстрым при редактировании кода, чтобы оставить данные, чувствительные к компании.Я собираюсь изменить свой вопрос –