Tengo una página html que muestra pedidos de comercio electrónico. Selecciono algunos de ellos con casillas de verificación y creo facturas usando una solicitud ajax al servidor php.
Ahora quiero crear estas facturas 3 por 3. Entonces, por ejemplo, si tengo 4 facturas, haré una solicitud ajax 2 veces y le mostraré el proceso al usuario. A continuación se muestra mi código, implementé async/await. Sin embargo, no funciona la sincronización. Ejecuto debajo del código para 4 facturas.
El resultado que espero debería estar en la consola de javascript:
"Hello" "Bye" "Hello" "Bye"Pero está imprimiendo en la consola:
"(2)Hello" "(2)Bye"Qué me estoy perdiendo ? Aquí está el código:
function processInvoices(){ var arr_ordersToBeProcessed = []; let bulkCount = 3; let currCount = 0; let totalCount = jQuery("#div_orders").find('.invoiceCheckbox:checked').length; jQuery("#div_orders").find('.invoiceCheckbox').each(async function(i, obj) { let clickedOrder = $(obj).parent().parent().parent(); if($(obj)[0].checked == true){ let obj_singleOrder = {}; obj_singleOrder.orderNumber = clickedOrder.find('.div_orderNumber').text(); arr_ordersToBeProcessed.push(obj_singleOrder); currCount++; if(currCount%3==0 || currCount==totalCount){ console.log("hello"); const data = await jQuery.ajax({ type: "POST", url: "./_production/createInvoices.php", data: { orders: JSON.stringify(arr_ordersToBeProcessed) } }); arr_ordersToBeProcessed = []; console.log("bye"); if(currCount==totalCount){ alert("Completed!"); return; } } } }); }Estás malinterpretando lo que hace "esperar". No hace que su llamada sea sincrónica. Simplemente le permite escribir Código de manera diferente para que múltiples llamadas a funciones asíncronas seguidas no provoquen que su Código caiga en cascada en el infierno.
Si desea lograr una llamada http síncrona usando jquery, puede hacerlo agregando
async: false(Como se describe aquí ¿Cómo puedo hacer que jQuery realice una solicitud Ajax síncrona, en lugar de asíncrona? ).
Sin embargo, recomendaría enfáticamente no usar llamadas http sincrónicas, ya que hará que su sitio web no responda mientras se responde la llamada.