$ тайм-аут для $ http с определенным URL-адресом AngularJS

Вот мой код: JS:

var timer;
$scope.getapi_url = function(n){
       var url = n;
        $http({
            method: 'GET',
            url: url,
        })
            .then(function successCallback(data) {
                $scope.data = data.data;
                console.info($scope,data);
                timer = $timeout($scope.getapi_url(), 5000);
            }, function errorCallback(response) {
                $scope.errorBackend = true;
                console.info(response);
                console.info('error');
            });
    };

HTML:

<button class = "btn btn-clear btn-sm" ng-click = "getapi_url('myurl') ">Click!</button>

После первого $timeout я получаю сообщение об ошибке, что-то вроде n is undefinded

Что я могу с этим сделать?

Заранее спасибо за все ответы !!!

Вы случайно не микшируете vm с $scope? Имеет ли ваш HTML-код синтаксис controllerAs?

Aleksey Solovey 16.07.2018 11:19

@AlekseySolovey Да, вообще-то у меня есть var vm = this; а это смешивание с $ scope - может быть в этом проблема?

bafix2203 16.07.2018 11:22

Просто запуталась, почему у вас и $scope.getapi_url, и vm.getapi_url

Aleksey Solovey 16.07.2018 11:23

О, это моя ошибка с написанием этого ответа

bafix2203 16.07.2018 11:25

в моем коде только vm

bafix2203 16.07.2018 11:25

почему вам нужна рекурсия в вызове API и каков выход для оператора рекурсии?

Rahul Sharma 16.07.2018 11:34
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
1
6
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте это, но это никогда не прекратится, вам нужно прекратить вручную использовать $timeout.cancel(timer);.

var timer;
$scope.getapi_url = function (n) {
    var url = n;
    $http({
            method: 'GET',
            url: url,
        })
        .then(function successCallback(data) {
            $scope.data = data.data;
            console.info($scope, data);
            timer = $timeout($scope.getapi_url(n), 5000); 
            // passing n if you don't want check n value on starting of function.
        }, function errorCallback(response) {
            $scope.errorBackend = true;
            console.info(response);
            console.info('error');
        });
};

@ bafix2203 вы можете написать условие перед вызовом $ http. if (n), тогда вызовите API else, чтобы пропустить.

Rahul Sharma 16.07.2018 16:08

Другие вопросы по теме