Ich versuche, zwei Funktionen in einer Post-Anfrage auszuführen, aber nur eine wird ausgelöst. Die Funktion makeEntry wird ausgeführt, aber die Funktion hinterher renderEntries doesnt. Kann jemand bitte helfen? Hier ist der Code: https://codepaste.net/bpsxsyNode.js nur eine Funktion ausgeführt
Antwort
Dies ist aufgrund der Funktionsweise von Callbacks in Javascript. Hier ist der Teil, der zählt:
app.post('/guestbook_post', urlencodedparser, function(req, res){
makeEntry(req, res, Guestbook);
renderEntries(res, Guestbook);
});
Sie passieren res
auf beiden Funktionen. Aber makeEntry
ruft res.send()
auf, was bedeutet, dass es die Anforderung beendet und die Antwort zurück an den Client sendet. renderEntries
wurde jedoch noch nicht ausgeführt, wartet aber immer noch in der Ereignisschleife. Es wird ausgeführt, wenn Sie das nächste Mal eine Post-Anfrage machen, was zu einem sehr verwirrenden und fehlerhaften Verhalten führt.
Um es als intendeed, funktioniert Refactoring-Funktionen makeEntry
und renderEntries
zu Rückkehr das benötigte Ergebnis Objekt und machen es einmal an den Client. Etwas wie dieses:
app.post('/guestbook_post', urlencodedparser, function(req, res){
makeEntry(req, Guestbook, (err, entry) => {
renderEntries(entry, Guestbook, (err, result) => {
res.send(result);
});
});
});
Thx aber res.send() wird nicht ausgeführt, wenn der Benutzer angemeldet ist. –
Das ist eine andere Frage, die Sie separat ansprechen können. Markieren Sie diese Frage als "akzeptiert", wenn sie das Problem "nur eine ausgeführte Funktion" löst. –
- 1. Node.JS Callback-Funktion wird nicht ausgeführt
- 2. Javascript-Funktion nur einmal ausgeführt
- 3. Warum funktioniert eine Handler-Funktion nur anonym in electron/node.js?
- 4. Kann eine JavaScript-Funktion nur im setTimeout-Callback ausgeführt werden?
- 5. Sicherstellen, dass nur eine Instanz einer Funktion ausgeführt wird?
- 6. Wie wird eine jQuery-Funktion nur für untergeordnete Elemente ausgeführt?
- 7. Funktion wird nur einmal ausgeführt C
- 8. Kontrollaufgabe im Hintergrund ausgeführt node.js
- 9. Node.js/express, Javascript Callback-Funktion nicht ausgeführt zu werden
- 10. Node.JS EventEmitter-Listener muss eine Funktion sein
- 11. Wie zu verhindern, Skript-Funktion ausgeführt werden, wenn eine Datei in Node.js erforderlich
- 12. Node.js Anfrage in Funktion
- 13. Javascript Promise.all() ausgeführt, bevor die Funktion ausgeführt wird, node.js Anfrage Bibliothek
- 14. Case-Anweisung nur eine Bedingung ausgeführt
- 15. Wie Node.js Modulinitialisierung richtig ausgeführt wird
- 16. "Callback" -Argument muss eine Funktion sein Node.js
- 17. Connect ist nicht eine Funktion node.js
- 18. Wie eine Warnung aus node.js Express-Funktion
- 19. Node.js Generator „bereits ausgeführt“, wenn Fehler selbst
- 20. Node.JS eine Node-Msql-Abfrage erneut ausgeführt, ohne Node.js Skript zu beenden
- 21. Node.js asynchrone Funktion, process.nextTick()
- 22. Verzeichnis, von dem node.js ausgeführt wurde
- 23. Node.js - SQL-Funktion nicht
- 24. Richtlinie auf fertige Funktion sollte nur einmal ausgeführt
- 25. Python - Nur die erste innere Funktion wurde ausgeführt
- 26. Ermitteln, wo eine Funktion ausgeführt wurde?
- 27. Sende eine Funktion, Modul zu Haupt über Objekt Funktion node.js
- 28. Warum wird diese Python-Generator-Funktion nur einmal korrekt ausgeführt?
- 29. node.js run Funktion im Kindprozess?
- 30. Code wird nur teilweise ausgeführt
Könnten Sie bitte weitere Informationen zur Verfügung stellen? Irgendwelche Fehler, die Sie erhalten können? Tritt dies ein, wenn der Benutzer nicht angemeldet ist? – Kostas
Wenn der Benutzer nicht angemeldet ist, wird send() ausgeführt und die Antwort erfolgt ohne renderEntries(). Aber renderEntries wird auch nicht ausgeführt, wenn der Benutzer angemeldet ist, res.send() wird nicht ausgeführt. –
Ok, beide Funktionen werden ausgeführt, aber die Einträge werden nur auf Get-Request nicht auf Post –