Ich habe eine Funktion in einem Modul, das die Anfrage-Versprechen-native Modul eine couchdb Datenbank abzufragen verwendet:Node.js: Wie ein rejcted Versprechen zurückzukehren, ohne UnhandledPromiseRejectionWarning zu bekommen
userByEmail: (email) => {
const options = {
url: `${config.couchdb.url}/medlog/_design/user/_view/by_email_or_userid?key="${email}"`,
json: true,
};
return rp.get(options)
.then(users => users.rows.map(row => row.value))
.catch(reason => Promise.reject(new Error('test')));
}
Ein zweites Modul enthält ein Funktion, die die erste verwendet:
router.get('/checkEmailExistence', (req, res) => {
couchdb.userByEmail(req.param('email'))
.then((userArray) => {
res.status(200).end(userArray.length > 0); // returns 'true' if at least one user found
})
.catch((e) => {
winston.log('error', e.message);
res.status(500).end(e.message);
});
im Fall, dass es keine Datenbankverbindung ist, das Versprechen von der Anfrage-Versprechen-native Modul wird abgelehnt. Ich möchte diese Zurückweisung in der zweiten Funktion abfangen und dem Anrufer einen internen Serverfehler zurückgeben. Um die Zurückweisung aus dem Anfrage-Versprechen-nativen Modul weiterzuleiten, fange ich es in der ersten Funktion und gebe ein neues abgelehntes Versprechen zurück.
Leider bekomme ich immer die Warnung, dass ich eine unbehandelte Versprechen Ablehnung habe. Wie kann ich dieses Problem lösen?
EDIT
Ich habe gerade gesehen, dass ich den falschen Codepfad zum Testen verwendet. Die obige Codierung funktioniert also ohne die Warnung zu erzeugen. Entschuldigung für die Verwirrung.
Im ersten Modul statt '.catch (Grund => Promise.reject (neu Error ('test'))); 'try' .catch (Grund => neuer Fehler ('Test')); ' –
In diesem Fall würde ich ein Versprechen erhalten, das mit der Fehlermeldung gelöst wird. Stattdessen möchte ich ein Versprechen erhalten, das abgelehnt wird. –
Sie können nicht innerhalb "catch" zurückweisen, aber Sie können die folgenden tun '.catch (Grund => neuen Fehler ('test') werfen);' –