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

243
Visualizações
¿Cómo esperar a que se complete una función antes de ejecutar la siguiente declaración?

Tengo un botón que ejecuta la siguiente función cuando se hace clic:

 async function VerifyData() { if(condition1) { MessageBox("Operation Not Allowed."); return; } //Code to form the Ids is here let result = await additionalCheck(Ids); //Passing Ids to Check if(result) { $("#Window").data("kendoWindow").open().center(); } else { return; } }

La función additionalCheck(Ids) es la siguiente:

 function additionalCheck(Ids) { let count = 0; return new Promise(resolve => { $.ajax({ url: '@Url.Action("GetDetails", "Data")', type: 'POST', dataType: "text", data: { ids: Ids }, success: function (data) { isSuccess = true; count = data; }, error: function (x, y, z) { isSuccess = false; } }).done(function () { $.unblockUI(); if (isSuccess) { if (count > 0) { MessageBox("Operation Invalid."); resolve(false); // This should prevent the verifyData() function also to terminate its execution } else { resolve(true);//It should return to the previous function and execute the next line. } } else { MessageBox("Error. Please try again."); return; } }); }); }

El problema al que me enfrento es cuando se llama a la función additionalCheck(Ids) , el código no espera la ejecución de la instrucción ajax y, en su lugar, abre la ventana de Kendo antes de que se complete la ejecución de la función. Quiero VerifyData() para esperar la ejecución de la función additionalCheck(Ids) antes de ejecutar la declaración después de la llamada de la función.

Intenté usar Promise pero no me funcionó (quizás no lo hice correctamente). ¿Cómo puedo lograr esto?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Para aclarar las cosas, JavaScript espera la ejecución de la función AdditionalCheck, pero no esperará la finalización de la solicitud ajax, que es asíncrona, deberá usar una promesa:

 //Passing Ids to Check additionalCheck(Ids).then(() => { $("#Window").data("kendoWindow").open().center(); })
 function additionalCheck(Ids) { return new Promise((resolve, reject) => { let count = 0; $.ajax({ url: '@Url.Action("GetDetails", "Data")', type: 'POST', dataType: "text", data: { ids: Ids }, success: function (data) { isSuccess = true; count = data; }, error: function (x, y, z) { isSuccess = false; } }).done(function () { $.unblockUI(); if (isSuccess) { if (count > 0) { MessageBox("Operation Invalid."); reject(); } else { resolve(); } } else { MessageBox("Error. Please try again."); reject(); } }); }) }

pero en ese caso particular, como se señaló en los comentarios, es más simple mover $("#Window").data("kendoWindow").open().center(); en el .hecho()

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