Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

294
Vistas
¿Cómo esperar la respuesta de la API en una función separada antes de continuar con la ejecución?

Soy nuevo en JavaScript/NodeJS y me cuesta entender lo que está pasando aquí. Estoy escribiendo una función que realizará alguna acción basada en la respuesta de una solicitud de publicación de API dentro de una función separada. Por ahora, esa acción solo muestra un mensaje de falla o éxito.

El siguiente código (dentro de un archivo app.js) simplemente está destinado a capturar las entradas del usuario, pasarlas a la función login_user (dentro de un archivo authenticate.js) y mostrar un mensaje basado en la respuesta de login_user.

 const { login_user } = require('./authenticate'); // Other requirements // App initialization app.post('/auth', function (req, res) { let username = req.body.username; let password = req.body.password; let response = login_user(username, password); if (response == 204) { res.send("Success"); } else { res.send("Failure"); } });

El siguiente código (dentro de authenticate.js) acepta la entrada del usuario, realiza una llamada a la API y devuelve el código de estado de la respuesta.

 const axios = require('axios'); const querystring = require('querystring'); function login_user(username, password) { var data = { j_username: username, j_password: password }; axios.post("https://fakeurl.com", querystring.stringify(data)) .then(function (response) { return response.status; }) .catch(function (error) { return response.status; }); } module.exports = { login_user }

Lo que sucede es que, una vez que se llama a la función login_user, el código continúa ejecutándose y va directamente a la cláusula else de la declaración if/else, lo que siempre resulta en una falla. Me gustaría esperar a que se devuelva la respuesta antes de ejecutar la instrucción if/else.

Intenté usar async/await con esta configuración...

 app.post('/auth', async function (req, res) { let username = req.body.username; let password = req.body.password; let response = await login_user(username, password); if (response == 204) { res.send("Success"); } else { res.send("Failure"); } });

... pero no tuve suerte. ¿Hice esto incorrectamente?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Prueba esto,

 const services = require('./authenticate'); app.post('/auth', async function (req, res) { try { let username = req.body.username; let password = req.body.password; let response = await services.login_user(username, password); if (response == 204) { res.send("Success"); } else { res.send("Failure"); } } catch (e) { return res.status(500).json({ status: 500, message: e.message }); } });

Y,

Dentro del archivo authenticate.js

 const axios = require('axios'); const querystring = require('querystring'); exports.login_user = async function (username, password) { try { let data = { j_username: username, j_password: password }; return axios.post("https://fakeurl.com"`enter code here`, querystring.stringify(data)) .then(function (response) { return response.status; }) .catch(function (error) { return response.status; }); } catch (e) { console.log(e); throw Error(`Failed to evaluate transaction: ${e}`) } }

Use Async y espere llamadas de función en ambos archivos.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Prueba esto

 function login_user(username, password) { var data = { j_username: username, j_password: password }; return axios.post("https://fakeurl.com", querystring.stringify(data)) .then(function (response) { return response.status; }) .catch(function (error) { return response.status; }); } app.post('/auth', async function (req, res) { let username = req.body.username; let password = req.body.password; let response = await login_user(username, password); if (response == 204) { res.send("Success"); } else { res.send("Failure"); } });

Axios devuelve una promesa

Para obtener más información, puede consultar esta respuesta aquí: Devolver datos de la API de Axios

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda