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

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

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 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!