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

240
Vistas
¿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 Respuestas
Responde la pregunta

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