Mi await de que asyncCall() termine en la función inputEntriesNotOnScreen no funciona a pesar de estar en una función asíncrona. me sale este error:
SyntaxError no capturado: await solo es válido en funciones asíncronas y los cuerpos de módulos de nivel superior
¿Qué significa la segunda parte del error?
function resolve1MS() { return new Promise(resolve => { setTimeout(() => { resolve('resolved'); }, 1); }); } async function asyncCall() { let clicked = false; while( !clicked){ await resolve1MS(); if($('.ui-menu-item').length != 0){ $('.ui-menu-item')[0].click(); clicked = true; $matrix = $("table.timesheet tbody tr"); return { lastRow: $matrix.last() } } } } async function inputEntriesNotOnScreen($matrix, notFoundInInitialSearch){ let lastRow = undefined; notFoundInInitialSearch.forEach(function(item, index){ console.log(item, index); if( lastRow == undefined){ lastRow = $matrix.last(); } else{ lastRow = await asyncCall(); } lastRow.find('.search')[0].click(); let $searchBar = $('.ui-autocomplete-input');multiple times $($searchBar[index]).val(item[0][0]); $searchBar[index].dispatchEvent(new Event('input')); }); }Está creando una función para pasar a su forEach que no es async .
Reemplazar forEach con un bucle for estándar debería permitirle usar await según sea necesario.
Como aviso, si realiza la función en forEach asíncrono, como forEach(async function(item, index) , podrá usar await dentro de la función, pero todas las devoluciones de llamada se ejecutarán en paralelo (después de llegar al await), y no tendrás forma de esperarlos.
https://jsfiddle.net/8nwdus0h/
Para obtener más información, puede leer Uso de async/await con un bucle forEach