我寫了一個工廠長時間輪詢,啓動和停止方法。但是,我無法取消定時器。有任何想法嗎?
app.controller("AuthCtrl", function($scope, $http, $window, User, Poller) {
Poller.start(1, $scope.session.user.user_uuid, function(result) {
User.data.queues.montage_progress = result.field;
if (result.field == 100) {
Poller.stop(); //DOES NOT STOP (see below)
}
});
})
這裏是工廠:
app.factory('Poller', function($http, $q, $interval, $window) {
var poll = this;
poll.timer = null;
poll.checkProgress = function(field, user_uuid) {
var deferred = $q.defer();
$http({
method: 'GET',
url: '/api/v1/poll/',
json: true,
params: {
field: field,
user_uuid: user_uuid
}
})
.success(function(data) {
deferred.resolve(data);
}).error(function() {
deferred.reject("Error checking poll");
});
return deferred.promise;
};
poll.start = function(url, user_uuid, callback) {
poll.timer = $interval(function() {
poll.checkProgress(url, user_uuid).then(function(result) {
console.log(result);
callback(result);
}, function(error) {
alert(error);
});
}, 2000);
};
poll.stop = function() {
$interval.cancel(poll.timer);
};
return poll;
});
編輯: 改變$window.clearInterval
到$interval.cancel(poll.timer);
如下建議。但仍然無法取消投票...
張貼完全相同的控制器代碼,因爲它是在你的JavaScript文件?因爲如果是這樣,我想你可能會在控制器定義的末尾丟失一個尾隨的');'。 – pje 2014-09-24 22:03:34