Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

295
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!