Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

119
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda