Estoy vinculando datos a 3 menús desplegables llamando a un método desde otro archivo de javascript. La fuente de datos de la carga desplegable de IndexedDB. enlace de datos JS,
function bindStateData(){ getMstStates("#state"); getMstStates("#drstate"); getMstStates("#cstate"); }administrador de base de datos js,
function getMstStates(state) { var request = indexedDB.open('AppDatabase', '3') request.onsuccess = function (e) { var dbInstance = e.target.result; let transaction = dbInstance.transaction("MstStates", "readonly"); const statesDetailsStore = transaction.objectStore("MstStates"); stateData = statesDetailsStore.getAll(); stateData.onsuccess = function () { var MstStatesMap = new Object(); var len = stateData.result.length, i; for (i = 0; i < len; i++) { MstStatesMap[i] = {}; MstStatesMap[i].StateId = stateData.result[i].StateId; MstStatesMap[i].StateName = stateData.result[i].StateName; } callBackOptionItems(MstStatesMap, state); } stateData.onerror = function () { console.log('getMstStates : ' + e); } } request.onerror = function (e) { console.log('getMstStates : ' + e); } } function callBackOptionItems(MstOptionMap, objID) { for (var j in MstOptionMap) { var k, v var tem = 0; for (var i in MstOptionMap[j]) { if (tem == 0) { k = MstOptionMap[j][i] } else { v = MstOptionMap[j][i]; } tem++ } var el = $(objID); $(el).append('<option value="' + k + '">' + v + '</option>'); } if (objID == '#select-history') { $("#select-history").append('<option value="4">Other</option>'); } }Cuando traté de cargar datos, obtuve el siguiente error:
Uncaught DOMException: Failed to read the 'result' property from 'IDBRequest': The request has not finished. at IDBRequest.stateData.onsuccessLa misma lógica de código se escribió en WebSQL, se estaba ejecutando correctamente, pero desafortunadamente desde la versión iOS 13 se revocó la compatibilidad con websql.
He resuelto este problema. La principal línea culpable es,
var len = stateData.result.length;El código correcto es el siguiente,
var _request = statesDetailsStore.getAll(); _request.onsuccess = function (event) { var MstStatesMap = new Object(); var stateData = event.target.result; }