javascript - Advertencia de Idea Intellij: "La promesa devuelta se ignora" con aysnc/await
node.js intellij-idea (3)
La cosa es que ni siquiera estoy devolviendo nada del método login ().
Una función declarada "asíncrono" devuelve una Promesa por definición. Ver, por ejemplo, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
Sin embargo, la advertencia de IDEA es sólo una inspección. Puede presionar "alt-enter, derecha" en la advertencia y cambiar el nivel de inspección para que desaparezca la advertencia. La inspección se encuentra en la categoría "JavaScript -> Errores probables" y se denomina "El resultado de la llamada al método que devuelve una promesa se ignora".
Estoy usando Express.js en mi código con Node.js v7.3. En esto he creado un User Router
que reenvía las solicitudes a mi User Controller
.
Estoy usando async / await dentro del User Controller
para hacer llamadas asíncronas. El problema es que IntelliJ me da una advertencia diciendo que
La promesa devuelta desde login () se ignora.
La cosa es que ni siquiera estoy devolviendo nada del método login()
.
Aquí está el código -
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 escribo el mismo método de inicio de sesión utilizando solo promesas nativas, no recibo esta advertencia. ¿Estoy entendiendo algo mal aquí o es culpa de IntelliJ?
EDITAR -
Gracias a @Stephen, entiendo que una función asíncrona devuelve una promesa, pero ¿no sería mejor si Intellij identifica que no se devuelve nada desde la función asíncrona y no muestra esa advertencia porque cuando .then()
un .then()
después? la función de login()
, proporciona un objeto undefined
en el resultado de entonces. ¿Significa que si no devolvemos algo de la función asíncrona explícitamente, se devuelve indefinido?
La función userController.login()
devuelve una promesa, pero no está haciendo nada con el resultado de la promesa utilizando su función then()
.
Por ejemplo:
userController.login(req, res).then(() => {
// Do something after login is successful.
});
o en la sintaxis ES2017:
await userController.login(req, res);
Si realmente no quieres hacer nada allí, supongo que puedes ignorar la advertencia. La advertencia está principalmente allí porque no usar la función then()
en una promesa suele ser un olor a código.
Si eres tan maníaco como yo y el then()
no es necesario pero necesitas que la advertencia desaparezca, una alternativa es:
functionWithAsync.error(console.error);