0

The scope of array 'chats' is limited only upto '.then' and gives its value null inside 'all' function

    angular.module('starter.services', [])
    .factory('Chats', function($http) {
    var chats=[];
      result = "";
    $http.get('http://localhost/Finalvts/AndroidData/GetDailySchedule.php')
    .success(function(data, status, headers,config){
    console.log('data success');
    console.log(data); // for browser console
    var i=0;
    data.forEach(function (x) {
    x['id']=i;
    i++;
    })
      chats = data; // for UI
      console.log(chats);

        })
    .error(function(data, status, headers,config){
      console.log('data error');
    })
      .then(function(result){
      chats = result.data;
      console.log(chats);
    });
      return {
    all: function() {
      console.log(chats);
      return chats;

    },
      remove: function(chat) {
      chats.splice(chats.indexOf(chat), 1);
    },
  };
});

An array chats doesn't shows the value returned by variable 'data' in console...Please give some suggestions... Thank You...

Avdhut K
  • 74
  • 1
  • 13
  • Possible duplicate of [How to use $http promise successCallback response outside callback in angularJs](http://stackoverflow.com/questions/35275451/how-to-use-http-promise-successcallback-response-outside-callback-in-angularjs) – georgeawg Mar 17 '17 at 06:07

1 Answers1

0

You return chats before fetching the data from http request. This is because $http.get is asynchronous and it takes certain time to fetch data. While this is fetching data you are returning the chats data which currently have []. Try returning data in .then(). Something like this

angular.module('starter.services', [])
     .factory('Chats', function($http) {
         var chats = [];
         result = "";
         $http.get('http://localhost/Finalvts/AndroidData/GetDailySchedule.php')
             .success(function(data, status, headers, config) {
                 console.log('data success');
                 console.log(data); // for browser console
                 var i = 0;
                 data.forEach(function(x) {
                     x['id'] = i;
                     i++;
                 })
                 chats = data; // for UI
                 console.log(chats);

             })
             .error(function(data, status, headers, config) {
                 console.log('data error');
             })
             .then(function(result) {
                 chats = result.data;
                 console.log(chats);
                 return {
                     all: function() {
                         console.log(chats);
                         return chats;

                     },
                     remove: function(chat) {
                         chats.splice(chats.indexOf(chat), 1);
                     },
                 };
             });

     });