2016-06-15 3 views
1

Итак, я написал службу для выполнения вызовов $ http.get и возврата необходимых переменных, которые мне нужны для функциональности моего шаблона. Проблема, с которой я сталкиваюсь, даже если я могу видеть и регистрировать данные на стороне сервера, всякий раз, когда я вызываю свою службу и пытаюсь получить доступ к переменным, которые они должны возвращать, я просто получаю «неопределенный».Служба в Угловом не возвращает возвращаемые переменные

Моя служба выглядит следующим образом:

function getResultsPage($http) { 
     var fetchPage = function(pageNumber, filterType, searchVal) { 
      var recordCount; 
      var contactsPage = []; 
      $http.get(
        '/searchTotal?filterType=' + filterType + '&searchVal=' 
          + searchVal).then(function(response) { 
       recordCount = response.data; 
       console.log("recordCount: " + recordCount); 
      }); 
      $http.get(
        '/search?filterType=' + filterType + '&searchVal=' 
          + searchVal + "&pgNo=" + pageNumber).then(
        function(response) { 
         response.data.forEach(function(contact) { 
          contactsPage.push(contact); // load search 
          // results into 
          // contactsPage 
         }); 
        }); 
      return { 
       recordCount : recordCount, 
       contactsPage : contactsPage 
      }; 
     } 
     return { 
      fetchPage : fetchPage 
     }; 
    } 

и мой контроллер:

function ContactsController($http, $filter, getResultsPage) { 
    var self = this; 

    // Begin lazy loading code 
    self.filterType = 'LastName'; 
    self.contactsPage = []; 
    self.recordCount = 0; 
    self.usersPerPage = 15; // this should match however many results your 
    // API puts on one page 
    self.pagination = { 
     current : 1 
    }; 
    self.pageChanged = function(newPage, filterType, searchVal) { 
     self.filterType = filterType; 
     self.recordCount = getResultsPage.fetchPage(newPage, filterType, 
       searchVal).recordCount; 
     console.log("record count in js = " + self.recordCount); 
     self.contactsPage = getResultsPage.fetchPage(newPage, filterType, 
       searchVal).contactsPage; 
     console.log("contactsPage in js = " + self.contactsPage); 
    }; 

    self.pageChanged(1, 'LastName', 'a'); 
    // End lazy loading code 

Вот картина выхода из моих бревенчатых заявлений в рамках функции pageChanged:

Чтобы уточнить: я получаю 1822 co ntacts обратно из моего запроса, но из моего контроллера я не могу получить этот номер для привязки к self.recordCount, и я не могу заставить возвращенный массив контактов успешно связываться с self.contactsPage. Спасибо за любую помощь!

+0

Пожалуйста, не перекреститесь (http://meta.stackexchange.com/tags/cross-posting/info): http://programmers.stackexchange.com/q/322332 –

ответ

0

Глядя на журналы, журнал консоли js (console.log("record count in js = " + self.recordCount);) выполняется первым, так как вызов службы асинхронный. Попробуйте использовать функцию обратного вызова, которая устанавливает переменные, когда служба вернулась.

Смежные вопросы