2017-11-09 3 views
0

Lets sagen, dass ich eine Funktion in einem Lifecycle-Methode einer Komponente haben, wie soKontinuierliche Ausführung der Funktion, auch wenn die Komponenten aushängen?

componentDidMount() { 
    this.taskRunner(); 
} 

taskRunner() { 
    setInterval((function(scope){ 
    return function(){ 
     scope.props.callApiandRecordtoDatabase(); 
    }; 
    })(this),360000); 
} 

Wird dieser Prozess auf einer gehosteten Website weiterlaufen, wenn niemand derzeit die Seite zu besuchen? Wie kann ich sicherstellen, dass es funktioniert?

Antwort

1

Ja, wenn Sie den Timer nicht explizit reinigen, wird er weiter ausgeführt. Aus diesem Grund wird empfohlen, dass Sie Dinge auf componentWillUnmount() reinigen. Als React-Dokument lautet:

componentWillUnmount() wird aufgerufen, unmittelbar bevor eine Komponente abgehängt und zerstört wird. Führen Sie bei dieser Methode alle erforderlichen Bereinigungen durch, z. B. das Deaktivieren von Zeitgebern, das Abbrechen von Netzwerkanforderungen oder das Bereinigen von Abonnements, die in componentDidMount() erstellt wurden.

0

Wird dieser Prozess auf einer gehosteten Website weiterlaufen, wenn niemand derzeit die Seite zu besuchen?

Nein, wird es nicht. Ich denke, Sie verwechseln das Konzept von Client und Server. ReactJS wird auf dem Client (d. H. Einem Browser wie Google Chrome) ausgeführt. Wenn dieses Skript ausgeführt wird und die Komponente unmount wird, wird es weiterhin im Speicher gehalten und die Funktion wird nach 360.000 ms ausgeführt, es sei denn, der JavaScript-Prozess wird gestoppt, was höchstwahrscheinlich passieren wird, wenn der Benutzer die Registerkarte schließt, die das Skript ausgeführt hat. Sie können mit einem Beispiel spielen, das ich auf WebpackBin eingerichtet habe: https://www.webpackbin.com/bins/-KyTgz4IOADwQYHiTvz9.

Was möchten Sie erreichen? Es tut nicht weh, Ihren Fragen einen Kontext hinzuzufügen, und die Community kann möglicherweise eine geeignetere Lösung vorschlagen, die Sie möglicherweise vorher nicht berücksichtigt haben.

+0

Grundsätzlich versuche ich einen Api-Aufruf in einem Intervall zu machen, in der Datenbank zu speichern, den neu aktualisierten Datensatz abzufragen und die Daten auf der Seite darzustellen. So funktioniert es, wie Sie sagten, wenn der Kunde geöffnet ist, und nicht anders. Ich sorge mich am meisten darüber, dass die Daten aus der API stündlich gespeichert werden ... würde dann diese Funktion zum Backend die Lösung sein? Oder gibt es einen anderen Ansatz, den ich nicht in Betracht ziehe? – Benediah

Verwandte Themen