J'utilise Express.js dans mon code avec Node.js v7.3. Dans ce cas, j'ai créé un User Router
qui transmet les demandes à mon User Controller
.
J'utilise async/await à l'intérieur des User Controller
pour effectuer des appels asynchrones. Le problème est qu'IntelliJ me donne un avertissement disant que
La promesse retournée par login() est ignorée.
Le truc, c'est que je ne renvoie rien du tout du login()
méthode.
Voici le code -
UserRouter.js
router.post('/login', function (req, res, next) {
userController.login(req, res); // I get the warning here
});
UserController.js
exports.login = async function (req, res) {
try {
const verifiedUser = await someFunction(req.body.access_code);
let user = await User.findOrCreateUser(verifiedUser);
res.status(200).send(user);
}
catch (err) {
res.status(400).send({success: false, error: err});
}
};
Si j'écris la même méthode de connexion en utilisant uniquement des promesses natives, je n'obtiens pas cet avertissement. Ai-je mal compris quelque chose ou est-ce la faute d'IntelliJ ?
EDIT -
Merci à @Stephen, je comprends qu'une fonction asynchrone renvoie une promesse mais ne serait-il pas mieux qu'Intellij identifie que rien n'est renvoyé par la fonction asynchrone et n'affiche pas cet avertissement car lorsque j'enchaîne un .then()
après le login()
il fournit une fonction undefined
dans le résultat final. Cela signifie que si nous ne retournons pas explicitement quelque chose de la fonction asynchrone, alors undefined est retourné ?
1 votes
Alors que la promesse se résume à
undefined
L'IDE vous avertit que vous ne tenez pas compte du fait qu'il résout ou rejette du tout et quand. Ce serait bien si vous pouviez marquer les fonctions comme "la promesse de ceci peut être ignorée en toute sécurité" afin que vous n'ayez pas à la marquer comme ignorée à chaque site d'appel.