2015-03-09 5 views
1

Как я могу получить qLength в этом:Доступ к переменному интервалу

var intervalPromise = $interval(function(){ 
    $http.get(request).success(function (datatemp) {     // Get Queue info JSON every 2s 
     if (angular.equals(store.queues, datatemp)) {    //if like the last, no change 
      console.log('Same values'); 
      qLength = store.queues.Jobs.length; 
     } else {             //Else, update 
      store.queues = datatemp; 
      console.log('Values updated') 
     } 
    }); 
}, 3000, 0); 

console.log(qLength); 

console.log (qLength) возвращает неопределенным.

Когда я пытаюсь использовать окно, это тот же результат.

+0

Где строка из кода? 'console.log (qlength)' –

+1

use '$ scope.qLength' –

+0

@RameshRajendran Вне блока. Я отредактировал, чтобы показать вам. – Pierolain

ответ

0

Вы не можете получить таким образом, потому что $interval() и запрос $http.get() работают в асинхронном режиме. Вы пытаетесь получить доступ к значению, доступ к которому можно получить асинхронно только синхронно. Простым способом получения значения, которое вы ищете, является создание функции, которая принимает самую длину и вызывает ее при выполнении запроса.

var qLengthCheck = function(length) { 
    // This logs the length in each interval 
    console.log(length); 
}; 

var intervalPromise = $interval(function(){ 
    $http.get(request).success(function (datatemp) {     // Get Queue info JSON every 2s 
     if (angular.equals(store.queues, datatemp)) {    //if like the last, no change 
      console.log('Same values'); 
      qLength = store.queues.Jobs.length; 
     } else {             //Else, update 
      store.queues = datatemp; 
      console.log('Values updated') 
     } 

     qLengthCheck(length); 
    }); 
}, 3000, 0); 

Если у вас возникли проблемы относительно асинхронных процессов, вы можете проверить это хороший пример не-программирования в этой stackoverflow answer

+0

Спасибо за ваше объяснение и решение. Если я хорошо понимаю, мне нужно использовать переменную длины, когда она была определена, но не раньше, ни внешний блок (или я должен использовать ваше решение). – Pierolain

+0

Да, вы поняли. – ryeballar

0

вы пропустили присваиваем переменной для

попробовать это ниже код

**var qLength="";** 
var intervalPromise = $interval(function(){ 
    $http.get(request).success(function (datatemp) {     // Get Queue info JSON every 2s 
     if (angular.equals(store.queues, datatemp)) {    //if like the last, no change 
      console.log('Same values'); 
      qLength = store.queues.Jobs.length; 
     } else {             //Else, update 
      store.queues = datatemp; 
      console.log('Values updated') 
     } 
    }); 
}, 3000, 0); 

console.log(qLength); 
+0

Не работает, получая '' в консоли. – Pierolain

+0

Что такое статус ошибки? –

+0

Как было сказано выше, это было синхронное/асинхронное вещество. – Pierolain

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