Necesito alguna orientación por favor.
Solo JS puro, no jQuery, por favor.
Estoy asignando una respuesta de búsqueda a una variable en la parte superior del archivo *.js (varias variables de búsqueda + diferentes, tanto GET como POST):
var srcDL; fetch(url) .then(response => response.json()) .then(data => srcDL = data); Esto funciona bien, sin embargo, más adelante en el mismo archivo, intento iterar a través del objeto, pero el error me dice que srcDL no está definido.
Uncaught TypeError: Cannot read properties of undefined (reading 'length')...Supongo que esto se debe a que la recuperación es asíncrona, por lo que el resto del archivo se ejecuta antes de que la recuperación obtenga una respuesta exitosa y haya actualizado la variable.
Array.from(document.querySelectorAll('.AU_dList')).forEach(function(e){ var idx = e.getAttribute('data-idx'); var selitem = e.getAttribute('data-selitem'); var s = ''; var data = ''; for( var i = 0; i < srcDL.length; i++ ){ s = srcDL[i]['pk']==selitem ? ' selected' : ''; data = data + '<option value="' + srcDL[i]['pk'] + '" '+ s +'>' + srcDL[i]['name'] + '</option>'; } document.getElementById("dept_"+idx).innerHTML = data; }); Traté de envolver el Array.from.... junto con muchas otras funciones que dependen de la respuesta de búsqueda a la variable, en un retraso con setTimeout() . Esto funciona parcialmente, hasta que otro evento necesite hacer referencia a una función creada dentro de / después de que se haya completado setTimeout() , lo que genera otro error:
<function> is not defined at HTMLSelectElement.onchange
Leyendo sobre async/await, esto realmente no resuelve mis necesidades, porque (si lo entiendo correctamente), cada instancia de mi DOM con clase .AU_dList llamará a la URL de búsqueda. Por lo tanto, llamar a la base de datos varias veces en el mismo archivo obteniendo la misma respuesta. Por lo tanto, quiero hacer inicialmente la llamada a DB, guardar la respuesta en una variable y luego usarla dentro del archivo tantas veces como sea necesario.
¿Cuál es el mejor enfoque para que esto funcione como se esperaba? ¿La recuperación es ultrarrápida o no es asíncrona? ¿Estoy casi allí o perdí completamente el punto?
EDITAR: Vuelva a abrir, esto no es un duplicado.