Angular js - return and console.log $http response from outside the method

Problem

Hi my code is very simple but i can't get to log the http result to this:

var app = angular.module('app', ['ngRoute']);

app.run(['contacts_helper','$rootScope', function(contacts_helper,$rootScope){
    var x = contacts_helper.getAll();
    console.log(x); // returns undefined 
  }]);

app.service('contacts_helper',['$http','$rootScope', function($http,$rootScope){

  this.getAll = function(){

    $http({
    method:'GET',
    url:'http://localhost/myjson.json',
    params:{id_user:$rootScope.session.id_user}

    }).success(function(response){

     return response;

    }).error(function(err){

     return false;

    });


    }


}]);

it always return undefined in console

So how to achieve this?

Problem courtesy of: sbaaaang

Solution

In your interface - you should make getAll is a promise. You need to use .then to access its content:

contacts_helper.getAll().then(function(response){
  console.log(response); 
}]);

This is possible, by changing getAll to return the http call.

this.getAll = function(){

    return $http({
    method:'GET',
    url:'http://facebook.com',
    params:{id_user:$rootScope.session.id_user}

    }).success(function(response){

     return response;

    }).error(function(err){

     return false;

    });

};

Or even simpler:

this.getAll = function(){

    return $http({
    method:'GET',
    url:'http://facebook.com',
    params:{id_user:$rootScope.session.id_user}

    });

};

Also, you should probably read How do I return the response from an asynchronous call?

Solution courtesy of: Benjamin Gruenbaum

Discussion

There is currently no discussion for this recipe.

This recipe can be found in it's original form on Stack Over Flow.