Ich versuche, einen Dienst zu implementieren, der alle 5 Sekunden einen Restaufruf ausführt. Früher habe ich $ interval verwendet, aber mir wurde klar, dass die Verwendung Probleme verursachen kann, wenn eine Anfrage aufgrund von Internetverbindungsproblemen länger als 5 Sekunden dauert.
service.fetchData= function () {
//UpdateHandler is my handler function which just fills my json array
restApiService.requestFromApi("REST" + '?latitude=' + latestCoords.latitude + '&longitude=' + latestCoords.longitude + '&radius=' + config.radiusInMetres, updateHandler);
};
$timeout(service.fetchData, 5000);
fetchData wird immer noch nur einmal aufgerufen.
Wie können wir das Timeout für mehrere Anrufe und Versprechungen verwenden (ich bin mit Versprechungen nicht sehr vertraut)?
Wenn Sie sich daran halten möchten $timeout
, sollten Sie die Funktion rekursiv mit einer Zeitüberschreitung aufrufen, und die Anforderung an API
ist abgeschlossen.
service.fetchData= function fetchData() {
//UpdateHandler is my handler function which just fills my json array
restApiService.requestFromApi("REST" + '?latitude=' + latestCoords.latitude + '&longitude=' + latestCoords.longitude + '&radius=' + config.radiusInMetres, updateHandler)
.finally(function(){
$timeout(fetchData, 5000)// Call new fetchData after finish previous
});
};
$timeout(service.fetchData, 5000);
Beispiel
angular.module('ExampleApp', [])
.controller('ExampleController', function(restApiService, $timeout) {
var vm = this;
this.fetchData = function() {
console.log("start request");
restApiService.requestFromApi("data")
.then(function() {
console.log("success response");
})
.finally(function() {
console.log("request again");
fetchByTimeout();// Call new fetchData after finish previous
});
};
function fetchByTimeout() {
$timeout(vm.fetchData, 5000);
}
fetchByTimeout();
})
// Service for simulate long API call
.service("restApiService", function($q, $timeout) {
return {
requestFromApi: function(request) {
var defer = $q.defer();
//simulate 10 seconds API call
$timeout(defer.resolve, 10000);
return defer.promise;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="ExampleApp">
<div ng-controller="ExampleController as vm">
</div>
</div>
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen