Ich habe eine Route, die zuerst die Datenbank abfragen müssen, dann mit den Ergebnissen, einen anderen Webdienst abfragen, dann mit diesem Ergebnis rendern die Seite. Ich habe diesen Fluss ausgearbeitet und versuche herauszufinden, die Fehlerbehandlung. Da ich mit mehreren Diensten rede, versuche ich den Fehler zu massieren, bevor ich ihn zurückgebe. HierexpressJS Versprechen und Fehlerbehandlung
ist die Struktur des Codes für die Route:
Models.Episode.findById(request.params.episodeID)
.catch(function (error) {
throw (throwjs.notFound());
})
.then(function (episode) {
if (episode.getUser().id !== request.user.href) {
return next(throwjs.unauthorized("You do not have access to this podcast"));
}
return doSomeOtherAsyncStuff();
})
.then(function (queryResponse) {
renderPage();
})
.catch(function (error) {
next(error);
});
Mein Problem mit dem ersten Haken ist. Mein Ziel bei diesem Haken ist es, den Fehler neu zu packen und die Ausführung zu stoppen und den Fehler an Middleware zu senden.
Mit der Art, wie es oben geschrieben ist, stoppt die Ausführung, aber meine Express-Fehlerbehandlung wird nicht aufgerufen.
Ich habe versucht, den ersten Fang als
.catch(function(error){
return next(error);
})
Umschreiben Aber das das Problem nicht lösen. Die einzige Lösung, die ich gefunden habe, ist, den Haken bis zum Ende zu bewegen. Aber dann verliere ich den Kontext der Fehlerstelle.
Irgendwelche Hinweise, was ich falsch mache? Danke, olivier
Haben Sie tatsächlich den ersten Fang wie in Ihrem Beispiel geschrieben? weil es einen Tippfehler gibt. – Seth
@Seth Guter Punkt, ich habe versucht, nur um sicher zu gehen, mit dem Tippfehler behoben und bekam das gleiche Problem. – otusweb
@ t.niese durch den Fang früh im Thread, ich weiß, das einzige, was fehlgeschlagen ist die obige Aussage. Wenn ich den Fang nur unten anlege, bin ich mir nicht sicher, was fehlgeschlagen ist. – otusweb