Je travaille actuellement sur un projet web et j'essaie de comprendre Node.js et express. Je sais à ce sujet pour obtenir le code asynchrone facile à maintenir que nous devrions utiliser promesses, mais je suis confus sur le scénario suivant: J'ai un gestionnaire d'itinéraire pour l'API REST, devrais-je retourner une promesse? même s'il n'y a pas de travail async fait là? i.e.:en utilisant des gestionnaires de routes express et promesses-quelles sont les meilleures pratiques?
dummy_router.post("/", passport.authenticationMiddleware(), (req, res) => {
return new Promise((fulfill, reject) => {
var result = some_simple_functionality();
if (result) {
fulfill(result)
} else {
reject(err)
}
}).catch(function (error) {
res.status(400).send('400: failed t :: ' + error + '\n');
});
});
également deuxième question sur la même question. Si j'effectue des tâches asynchrones et que j'ai des promesses de les contenir, est-ce une bonne pratique?
dummy_router.post("/", passport.authenticationMiddleware(), (req, res) => {
some_promise().then((result) => {
}, (err) => {
}).catch(function (error) {
res.status(400).send('400: failed t :: ' + error + '\n');
});
});
Votre premier exemple est la fabrication d'une promesse lorsque rien n'est nécessaire. Il n'y a aucune raison d'emballer le code synchrone dans une promesse. Cela ajoute simplement de la complexité qui n'est pas nécessaire et n'apporte aucun avantage. Votre deuxième exemple semble utiliser une opération asynchrone réelle qui renvoie une promesse. Cela semble généralement correct, mais il n'est pas clair pourquoi vous avez à la fois un gestionnaire d'erreur sur votre '.then()' et un '.catch()'. Choisissez l'un ou l'autre et sachez qu'un gestionnaire de rejet qui ne renverra pas ou ne renverra pas une promesse rejetée changera la promesse en une promesse remplie (dépassant le rejet). – jfriend00
Ainsi, votre gestionnaire de rejet vide "mange" tous les rejets. C'est mauvais. Vous pouvez simplement le supprimer et laisser '.catch()' faire son travail. – jfriend00
merci, cela a du sens. Je savais que le premier exemple ajoute une complication inutile, je voulais juste savoir si je l'ai bien compris.à propos du gestionnaire catch() et reject, si je fais un peu de travail en cas d'échec de some_promise() et que je l'enchaîne à une autre promesse, est-il justifié d'utiliser à la fois le gestionnaire de rejet et catch()? – tomer99r