Intellij Idea avertissement - “Promesse retourné est ignoré” avec aysnc/vous attendent
Je suis en utilisant Express.js dans mon code avec Node.js v7.3. En cela, j'ai créé un User Router
qui transmet la demande à mon User Controller
.
Je suis en utilisant async/await à l'intérieur de la User Controller
de faire des appels asynchrones. Le problème est que l'Ide me donne un message d'avertissement disant que
Promesse retourné à partir de login() est ignoré.
Le truc c'est que je ne suis pas encore de retour, quelque chose de l' 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 à l'aide de native promet alors seulement je n'ai pas cet avertissement. Suis-je comprendre quelque chose de mal ici ou IntelliJ est en faute?
EDIT -
Grâce à @Stephen, je comprends qu'un asynchrone en fonction renvoie une promesse, mais ça ne serait pas mieux si Intellij identifie que rien n'est retourné par la fonction async et ne montre pas que l'avertissement parce que quand j'ai de la chaîne d'un .then()
après la login()
fonction, il fournit une undefined
objet dans le résultat. Cela signifie que si nous ne retournons pas quelque chose à partir de la fonction async explicitement ensuite undefined est de retour?
OriginalL'auteur Jyotman Singh | 2016-12-22
Vous devez vous connecter pour publier un commentaire.
Une fonction déclarée "async" renvoie une Promesse, par définition.
Voir, par exemple, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
Cependant l'IDÉE d'alerte est seulement une inspection. Vous pouvez appuyer sur "alt-entrée, à droite" sur l'avertissement et de modifier le niveau de l'inspection pour faire la mise en garde de s'en aller.
L'inspection est dans le "JavaScript> Probable bugs" catégorie et est nommé "Résultat de l'appel de la méthode retournant une promesse est ignoré."
OriginalL'auteur Stephen Friedrich
La
userController.login()
fonction renvoie une promesse, mais vous ne faites rien avec le résultat de la promesse en utilisant sesthen()
fonction.Par exemple:
ou dans le ES2017 syntaxe:
Si vous n'avez pas vraiment envie de faire quelque chose là, je suppose que vous pouvez simplement ignorer l'avertissement. L'avertissement est surtout là parce que de ne pas utiliser la
then()
fonction sur une promesse est habituellement une odeur de code.Donc, est-ce une bonne approche pour ignorer une promesse de retour de la fonction de valeur si je n'ai pas besoin dans la série de l'exécution de mon code ?
Si vous n'avez vraiment pas de soins si la fonction réussit ou échoue, et vous ne voulez pas faire n'importe quoi avec la valeur retournée une fois que la promesse est résolu, vous pouvez omettre le
.then()
appel.OriginalL'auteur Robba
si vous êtes vraiment maniaque que moi et le
then()
n'est pas nécessaire, mais vous avez besoin que l'avertissement disparaît, une alternative est la suivante:OriginalL'auteur winter