Verwenden von $ timeout für wiederholte Restaufrufe in eckigen js

Abdul Salam Shaikh

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)?

Stepan Kasyanenko

Wenn Sie sich daran halten möchten $timeout, sollten Sie die Funktion rekursiv mit einer Zeitüberschreitung aufrufen, und die Anforderung an APIist 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.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Verwenden von Aufgaben für wiederholte Aktionen

Verwenden von eckigen Klammern für den Paketkopf in scapy

Anzeigen von Optionen für abhängige Auswahlfelder in eckigen js

Verwenden von eckigen 2 Materialsymbolen

Verwenden einer Suchfunktion in eckigen js

Verwenden des Batteriemanagers in eckigen js

Verwenden von HttpCookie für Timeout / URL-Ablauf

Welche Art von Ausnahme sollte ich für wiederholte 5XX-Antwortcodes verwenden, die in scala geworfen werden?

Verschachtelung von Ansichten in eckigen js

Verwenden von eckigen $ asyncValidators mit einem Cache

Verwenden von Diensten in nicht eckigen Klassen

Verwenden von eckigen Klammern in x86

Wie kann ich die Laravel-Teilansicht von eckigen js in templateURL verwenden?

Verwenden Sie Staubschablonen mit eckigen js

Entprellen für Klickereignis in eckigen js

Funktionalität für Seitenaufrufe in eckigen js

Verwenden einer Klasse für wiederholte Zeilen in Python

Subsetting von Daten in R für wiederholte Werte

Verwenden von Apache HttpClient zum Festlegen des TIMEOUT für eine Anforderung und Antwort

Die Lambda-Funktion von Node.js führt wiederholte http-Aufrufe durch

Generierung von Zeilennummern für wiederholte Clients - SQL

Verkürzung von Javascript für wiederholte Elemente

Wie man auf Freemarker-Objekte in eckigen js zugreift oder kann ich eckige anstelle von Freemarker verwenden

Verwenden von js-Funktionen für mehrere Tasten

Laden und Verwenden von JSON für Cytoscape.js

React.js - Verwenden von Eigenschaftsinitialisierern für alle Komponentenmethoden

Verwenden von CDNJS mit LibMan für Moment.JS

Verwenden von next js für eine statische Website

ng-deaktiviert von Bild in eckigen js

TOP Liste

  1. 1

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

  2. 2

    Wie füge ich mehrere Spalten in einer Spalte mit derselben Tabelle in SQL Server zusammen?

  3. 3

    Wie kann man Gitterquadrate dazu bringen, die Farbe zu ändern?

  4. 4

    Ich kann nicht verstehen, wie man Go-Code in mehreren Dateien kompiliert

  5. 5

    Zählen Sie die Vorkommen jedes Werts in einem Tupel in Python

  6. 6

    Gibt es eine sauberere Möglichkeit, Konstruktorargumente und Instanzeigenschaften einer Klasse in Typescript zu definieren?

  7. 7

    So implementieren Sie Pushwoosh mit ionic 2

  8. 8

    Wie wird der Wert im Dropdown-Menü basierend auf den ausgewählten Daten / IDs angezeigt?

  9. 9

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  10. 10

    Ändern Sie den Knotenpfad in das aktuelle Verzeichnis

  11. 11

    So erstellen Sie ein Array von Objekten aus zwei Arrays von Objekten mit einem gemeinsamen Schlüssel - JavaScript

  12. 12

    Rufen Sie die ID aus der Datagrid-Ansicht ab und zeigen Sie die Daten in Textfeldern einem anderen Formular an

  13. 13

    base js: Wie füge ich einem Objekt eine Eigenschaft auf die 'alte' Weise hinzu?

  14. 14

    Ersetze einen Teil einer Zeichenfolge durch eine Pandas-Spalte als Muster

  15. 15

    Blättern Sie auf Radio Click zur Abschnitts-ID

  16. 16

    CBCentralManager wird nach dem Verbinden neu gestartet

  17. 17

    Scherz, wie man eine Funktion verspottet, die von einer verspotteten Funktion zurückgegeben wird

  18. 18

    django-allauth Empfängersignal zum Hinzufügen einer Gruppenberechtigung zum Benutzer bei der Anmeldung

  19. 19

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  20. 20

    AQL: Teilweise Übereinstimmung in einer Reihe von Zeichenfolgen

  21. 21

    So summieren Sie die Werte zweier Tabellen und gruppieren sie nach Datum

heißlabel

Archiv