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

120
Vistas
Async Await con Mocha + Axios TrobuleShooting

estamos usando mocha + nodejs + axios

A continuación se muestra el fragmento de código que tengo, todos están en un archivo diferente.

Archivo 1: bloque de TI

 it('Perform Post Payment Actions', function () { postPaymentController.triggerPostPaymentActions(params); });

Archivo 2: Controlador

 module.exports.triggerPostPaymentActions = function (params) { const actions = params.postAuthActionId.split('-'); // // 'PARTIALREFUND, 50, SUCCESS - PARTIALREFUND, 50, FAIL Object.entries(actions).forEach(([, action]) => { const actionAsArray = action.split(','); // 'PARTIALREFUND, 50, SUCCESS switch (actionAsArray[0]) {. // PARTIALREFUND case 'PARTIALREFUND': paymentsPartialRefundApi.submitPaymentsPartialRefundApi(actionAsArray, params); break; default: break; } }); };

Archivo 3: Llamada API Acutal usando axios

 module.exports.submitPaymentsPartialRefundApi = async function (actionDetails, params) { const postOptions = { url: partialRefundApiUri, method: 'POST', headers: restHeaders, data: params.partialRefundRequest, }; try { const response = await axios(postOptions); params.partialRefundResponse = response.data; process.env.PARTIALREFUNDRESPONSE = JSON.stringify(params.partialRefundResponse); } catch (err) { process.env.ERRORCODE = err; process.env.SCRIPT_STATUS = 'failure'; process.env.PARTIALREFUNDRESPONSE = 'Partial Refund request Failed'; throw err; } };

PROBLEMA :

Cuando se pasa el control a submitPaymentsPartialRefundApi , crea la solicitud de axios pero, en lugar de esperar la llamada de axios, lleva el control de vuelta al caso del interruptor. mi expectativa era que, dado que estoy usando async await, se ejecutará y esperará hasta que se complete la llamada axios, pero en lugar de completar la llamada, devuelve el control a la declaración del interruptor y desde el interruptor vuelve al bloque de TI. entonces tengo 2 problemas. 1 No está esperando a que finalice la llamada axios 2 No está ejecutando el interruptor dos veces en bucle, vuelve al bloque de TI y luego regresa.

Soluciones probadas:

Ya intenté usar promesas para esto, con y sin tiempo de espera, pero aún así no funcionó. Cualquier ayuda en esto es apreciada.

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

0

submitPaymentsPartialRefundApi es una función asíncrona, pero no está esperando que se complete en su controlador.

Su código es muy extraño y no entiendo qué se supone que debe hacer, ya que no devuelve nada de la función de su controlador y su script de prueba en realidad no prueba nada. Dicho esto, su controlador debe hacer algo como lo siguiente:

 module.exports.triggerPostPaymentActions = function (params) { const actions = params.postAuthActionId.split('-'); // // 'PARTIALREFUND, 50, SUCCESS - PARTIALREFUND, 50, FAIL return Promise.all(Object.entries(actions).map(([, action]) => { const actionAsArray = action.split(','); switch (actionAsArray[0]) { case 'PARTIALREFUND': return paymentsPartialRefundApi.submitPaymentsPartialRefundApi(actionAsArray, params); break; default: // return something here or use Array.filter before Array.map break; } })); }

Entonces it bloque debería probar que la promesa devuelta se resuelve o algo así...

 it('Perform Post Payment Actions', function () { return expectAsync(postPaymentController.triggerPostPaymentActions(params)).toBeResolved(); });
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