Node Js asynchrone Router

BTCStorage

Ensign
Registriert
Mai 2020
Beiträge
137
Hallo, ich habe eine einfache Frage, ich habe ein Node js Router und ich will das er direkt eine Antwort sendet damit es keine Timeout Fehler gibt, ich habe den Code der etwas Zeitintensiver ist in eine Promise gestellt und dadrunter den Befehl der eine Antwort sendet, ich bin mir nicht ganz sicher ob der Router jetzt jedesmal erst auf die Promise warten wird oder die Antwrt direkt sendet, ich habe zumindest keine await benutzt fuer die Promise, aber bin mir nicht ganz sicher wie Node js das bearbeitet.

Das Objekt was gesendet wird ist global und deswegen kann es eigentlich jedesmal direkt gesendet werden und bei Aufruf des Routers wird dann noch im Hintergrund die Promise jedesmal neu gestartet und so das objekt geupdated, das ist meine eigentliche Idee, kann mir jemand sagen ob ich das so gut aufgebaut habe, hier mein Code:

Javascript:
let objektKunden=[];
app.get('/getuser', async function (req, res)
{
  try
  {
     new Promise((resolve) => {
      //console.log(getuser);
      
      // Filtere Datensätze
      const kundenData = [];
      const masterData = [];

        Kunden.forEach(item => {
          if (item.note !== "master") {
            kundenData.push(item);
          } else {
            masterData.push(item);
          }
        });
      objektKunden[0]=kundenData;
      objektKunden[1]=APIKeyInvalid;
      objektKunden[2]=Masteraccounts;
      objektKunden[3]=masterData;
      const responseJSON = JSON.stringify(objektKunden);     
  });
  res.status(200).json(objektKunden);
  }
  catch (error)
  {
    console.error("Fehler in getuser:", error);
    res.status(500).send("Interner Serverfehler");
  }
});
 
Folgende Dinge sind mir aufgefallen:
  • Javascript:
    Kunden
    wird nirgendwo gesetzt
  • Javascript:
    responseJSON
    wird nirgendwo verwendet
  • ich sehe in deinem gesamten Code keinen Aufruf einer asynchronen Funktion

Ich vermute hier ein XY-Problem - was genau hast du vor? Was meinst du mit
ich will das er direkt eine Antwort sendet damit es keine Timeout Fehler gibt
 
Hallo,

ich will das der Router "getuser" das globale Objekt "objektKunden" immer direkt sendet damit es keine Timeout Fehlermeldungen gibt, aber zur zeit sehe ich das es manchmal vorkommt, ich weis nicht ob es nur an diesen Router liegt oder wahrscheinlich sind meine anderen Router auch nicht so optimal asynchron aufgebaut.

Was ich also erreichen will ist das im Hintergrund das globale Objekt "objektKunden" immer wieder neu geupdated wird, dies soll aber asynchron passieren und der ROuter "getuser" soll nicht jedesmal erst warten bis die Promise durchgelaufen ist.

xeon.inc schrieb:
Folgende Dinge sind mir aufgefallen:
  • Javascript:
    Kunden
    wird nirgendwo gesetzt
  • Javascript:
    responseJSON
    wird nirgendwo verwendet
  • ich sehe in deinem gesamten Code keinen Aufruf einer asynchronen Funktion

Ich vermute hier ein XY-Problem - was genau hast du vor? Was meinst du mit

Das Objekt "Kunden" ist auch global in der Serverdatei und die Promise im Router "getuser" nutzt die Daten aus dem Objekt und erstellt dann damit das Objekt "objektKunden" welches der Router jedesmal als Antwort senden soll.

Wie mueste ich diesen "getuser" Router den am besten aufbauen damit es so wie gewuenscht ablaeuft, es soll also immer direkt das Objekt "objektKunden" als Antwort gesendet werden ohne auf den Ablauf der Promise zu warten.

Die Promise Aufgabe welche im ich im Router "getuser" habe soll eigentlich nur dafuer sorgen das dieses Objekt immer wieder von Zeit zu Zeit geupdated wird, ich wollte dafuer keine Interval Funktion bauen, weil es eigentlich nicht noetig ist, es sei den das was ich vorhabe ist nichts anders zu loesen. Vielleicht habe ich ja irgendetwas mit dem ganzen Javascript Asynchron nicht verstanden. Ich dachte mir wenn ich den Code in eine Proise einbaue wird es asynchron im Hintergrund abgearbeitet ohne das der Router auf die Erfuellung der Promise wartet Ich will ja erreichen das der Router immer schnell eine Antwort gibt deswegen habe ich gedacht dieser Aufbau koennte so funktionieren.
 
Zurück
Oben