Eric is right about promises, but there are times where you want to return the data from a $http call through the $q promise. For example, we use it for client-side caching to prevent unnecessary calls to API in the enterprise app I work on at the moment.
On Fri, Sep 5, 2014 at 2:34 PM, Eric Eslinger <[email protected]> wrote: > You can just treat $http.get() as a promise. You don't have to directly > instantiate a second promise unless you're doing something funky. > > return $http.get().then(function(data){return > massageData(data)}).catch(function(err){at least you have some error > handling}) > > Also, if you're getting an error, what's the failed? At the very least, > I'm 99.9% sure that http://localhost:/localfile.txt is an incorrect url. > Don't you have to put a port after a : in a host definition? so either > localhost/localfile or localhost:3000/localfile. So it could be that your > $http.get is just failing. You can get more information on this in the > chrome debug tools - look at your network requests, and it should show the > localfile.txt XHR, and either be black (success!) or red (fails!) and have > more information there. > > e > > > On Fri, Sep 5, 2014 at 10:54 AM, mark goldin <[email protected]> > wrote: > >> Actually I am rather getting alert that says Error. >> >> >> On Friday, September 5, 2014 12:52:33 PM UTC-5, mark goldin wrote: >>> >>> Ok, I have changed my code. Here it is: >>> >>> Service >>> angular.module('myModule').factory("service", function ($http, $q) { >>> >>> var requestUri = 'http://localhost:/localfile.txt'; >>> return { >>> getData : function(){ >>> var deferred = $q.defer(); >>> var response = $http.get(requestUri); >>> response.success(function (data) { >>> deferred.resolve(data); >>> }); >>> response.error(function (data) { >>> alert('Error'); >>> }); >>> // Return the promise to the controller >>> return deferred.promise; >>> } >>> } >>> }); >>> >>> Controller: >>> var promise = service.getData(); >>> $scope.data = promise.then(function (data) { >>> alert('Success: ' + data); >>> }, function (reason) { >>> alert('Failed: ' + reason); >>> } >>> ); >>> When I run it I get the alert that says Failed ... >>> >>> BTW, if I change my service to this: >>> getData : function(){ >>> var deferred = $q.defer(); >>> deferred.resolve('1234'); >>> return deferred.promise; >>> } >>> Then I get Success >>> >>> On Friday, September 5, 2014 11:32:42 AM UTC-5, Thomas Murphy wrote: >>>> >>>> Great, so let's focus on what's happening in the controller. As Sander >>>> said, you're returning a promise from you service. *That promise needs >>>> to be resolved. *Check out the documentation here on the syntax, and >>>> see if it doesn't provide you the data you're expecting. https://docs. >>>> angularjs.org/api/ng/service/$q >>>> >>>> Feel free to paste in a bit more of your controller code too. >>>> >>>> >>>> On Fri, Sep 5, 2014 at 12:28 PM, mark goldin <[email protected]> >>>> wrote: >>>> >>>>> 1. serviceName.getData(); >>>>> 2. The url points to a text file on the local web server. Navigating >>>>> from Browser to the file opens it with no problem. >>>>> >>>>> On Friday, September 5, 2014 9:58:27 AM UTC-5, Thomas Murphy wrote: >>>>>> >>>>>> 1. What are you doing in the controller once you call >>>>>> serviceName.getData()? >>>>>> 2. What url are you calling in $http.get? If you're not calling >>>>>> anything, you'll get no data. >>>>>> >>>>>> Best, >>>>>> Thomas >>>>>> >>>>>> >>>>>> On Fri, Sep 5, 2014 at 10:49 AM, mark goldin <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> I also found this code: >>>>>>> function ($http, $q) { >>>>>>> return { >>>>>>> getData : function(){ >>>>>>> var deferred = $q.defer(); >>>>>>> var promise = $http.get(url).success(function >>>>>>> (response) { >>>>>>> deferred.resolve(response); >>>>>>> }); >>>>>>> // Return the promise to the controller >>>>>>> return deferred.promise; >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> and in controller to get data: serviceName.getData(); >>>>>>> >>>>>>> but I get no data. Can you please explain why is not working? >>>>>>> >>>>>>> Thanks >>>>>>> >>>>>>> >>>>>>> On Friday, September 5, 2014 9:39:49 AM UTC-5, mark goldin wrote: >>>>>>>> >>>>>>>> Ok, I see how it works. >>>>>>>> Another question. Is it possible to have just one function >>>>>>>> *MyTestService >>>>>>>> *and run it like this? >>>>>>>> <div ng-controller='*MyTestService *as vm'> >>>>>>>> <p>the result from the service load:</p> >>>>>>>> <pre>{{vm.data|json}}</pre> >>>>>>>> </div> >>>>>>>> >>>>>>>> On Friday, September 5, 2014 9:28:42 AM UTC-5, mark goldin wrote: >>>>>>>>> >>>>>>>>> What vm.data shown in index.html would come from if I remove the >>>>>>>>> TestMyService function? >>>>>>>>> >>>>>>>>> On Friday, September 5, 2014 1:32:11 AM UTC-5, Sander Elias wrote: >>>>>>>>>> >>>>>>>>>> Hi Mark, >>>>>>>>>> >>>>>>>>>> You mean something like this: http://plnkr.co/edit/5cE >>>>>>>>>> NSfOAhKJDI0iwe6ZV?p=preview >>>>>>>>>> >>>>>>>>>> Regards >>>>>>>>>> Sander >>>>>>>>>> >>>>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "AngularJS" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to [email protected]. >>>>>>> To post to this group, send email to [email protected]. >>>>>>> Visit this group at http://groups.google.com/group/angular. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "AngularJS" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> Visit this group at http://groups.google.com/group/angular. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >> You received this message because you are subscribed to the Google Groups >> "AngularJS" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/angular. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to the Google Groups > "AngularJS" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/angular. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "AngularJS" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/angular. For more options, visit https://groups.google.com/d/optout.
