Извините за запутанный титул, я действительно не понимаю, как сформулировать этот вопрос. Я пробовал погулять тонну разных фраз, но те же результаты продолжаются, и это не то, что я ищу.
Во-первых, я новичок в angularjs и javascript, так что извиняюсь, если пропущу что-то довольно простое.
Рассматривая интервальную документацию: https://docs.angularjs.org/api/ng/service/ $ interval
То, что я пытаюсь сделать, это вызвать услугу $ interval, например:
controller.js:
(function() {
function controller($scope, $interval, myService) {
var stop;
function handleCallback( myParams ) {
//do stuff with myParams
//call stopInterval function if neccessary.
}
$scope.doSomething = function() {
stop = $interval(myService.doWork, 5000, 0, handleCallback);
};
var stopInterval = function() {
if (angular.isDefined( stop ) ) {
$interval.cancel( stop );
stop = undefined;
};
};
}
angular.module( 'myApp' ).controller( 'controller', controller);
})();
мой-service.js
(function() {
function myService($q, $http) {
myService.doWork = function( callback ) {
var dfd = $q.defer();
$http.get('url').success( function( response ) {
//Would parse the response into an appropriate response
//before calling the callback method with it.
callback( response );
dfd.resolve( response );
}).error( function( response ) ) {
//will add an error callback once I get this working
dfd.reject( response );
});
return dfd.promise;
}
return myService
}
angular.module( 'myApp' ).factory( 'myService', myService);
})();
Когда я перехожу к этому, и я запускаю метод myService.doWork (обратный вызов), обратный вызов никогда не является функцией, а просто числом и каждый раз, когда он попадает, число увеличивается на единицу.
Я не уверен, откуда это число, но я предполагаю, что я неправильно настраиваю вызов $ interval. Глядя на угловую документацию, тип параметра Pass указывает "*", поэтому я предполагаю, что это означает, что поддерживается любой тип и что функции являются действительными параметрами. Разве это не так? Невозможно ли передать функцию в качестве параметра в fn для услуги $ interval?
-Thanks заранее, чтобы посмотреть.
Вы возвращаете обещание со своего сервиса. Какую конкретную причину вы бы не делали:
var stop = $interval(function () {
myService
.doWork()
.then(function (res) {
//if promise is successful, res is your data
$interval.cancel(stop)
})
.catch(function (err) {
//if promise was rejected, err is your servers error message
});
}, 5000);
Похоже, вы распространяете свою логику без необходимости.
Ваше использование $timeout
верное. Ваше определение услуги не является.
Попробуйте вернуть объект, в котором вы определяете свой метод doWork. Сделайте определение службы следующим образом:
angular.module( 'myApp' ).factory( 'myService', myService);
function myService() {
var doWork = function() {
...
};
return { doWork: doWork };
}