很抱歉这个令人困惑的标题,我真的不知道怎么说这个问题。我尝试使用谷歌搜索大量不同的短语,但同样的结果不断出现,这不是我正在寻找的。 p>
首先,我是angularjs和javascript的新手,如果我想念一些非常简单的东西,那么道歉。
查看间隔文档: https://docs.angularjs.org/api/ng/service/ $间隔
我尝试做的是调用$ 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);
})();
MY-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 param类型表示" *"所以我假设它意味着支持任何类型,并且该函数是有效的参数。这不是这种情况吗?对于$ interval服务,是否不能将函数作为参数传递给fn?
- 提前谢谢你看看。
答案 0 :(得分:1)
您将从服务中返回承诺。你不会做以下任何特殊原因吗?
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);
好像你正在不必要地传播你的逻辑。
答案 1 :(得分:0)
您对$timeout
的使用是正确的。您对服务的定义不是。
尝试返回定义doWork方法的对象。像这样做服务定义:
angular.module( 'myApp' ).factory( 'myService', myService);
function myService() {
var doWork = function() {
...
};
return { doWork: doWork };
}