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.

Reply via email to