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

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

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