【问题标题】:Two queries in IndexedDBIndexedDB 中的两个查询
【发布时间】:2013-10-16 09:35:25
【问题描述】:

我对这段代码有疑问。

function checklistAntesdesalirUsuario() {

if (plataforma == plataformaW8) {
    while (db == null)
        db = abrirDB();

    var transactionUsuario = db.transaction(storeCLAntesDeSalirUsuarioNombre, "readonly");
    var transaction = db.transaction(storeCLAntesDeSalirNombre, "readonly");

    var objectStoreAntesDeSalirUsuario = transactionUsuario.objectStore(storeCLAntesDeSalirUsuarioNombre);
    var objectStoreAntesDeSalir = transaction.objectStore(storeCLAntesDeSalirNombre);

    var requestUsuario = objectStoreAntesDeSalirUsuario.openCursor();
    var request = objectStoreAntesDeSalir.openCursor();

    var cursor;
    var cursorUsuario;
    var count = 0;
    var i = 0;
    var cargadoUsuarios = false;

    var queryChecklistAntesdesalirUsuario = new Array();

    request.onsuccess = function (evt)
    {
        cursor = evt.target.result;
        seguir();
    };

    request.onerror = function(evt)
    {
        console.log("ERROR!");
    }
    requestUsuario.onsuccess = function (evt2)
    {
        cursorUsuario = evt2.target.result;
        cargadoUsuarios = true;
        seguir();
    };
    requestUsuario.onerror = function(evt)
    {
        console.log("ERROR!");
    }

    function seguir()
    {
        if (!cursor || !cargadoUsuarios)
         return;

        if (cursorUsuario && cursor.value.id_check == cursorUsuario.value.id_check) {

            cursorUsuario.continue();
        }
        else  {
            cursor.continue();
        }

        if (cursor && cursorUsuario && cursor.value.id_check == cursorUsuario.value.id_check) {
            var antesdesalir = new CLFinal(cursor.value.id_check, cursor.value.descripcioncheck, cursorUsuario.value.tarearealizada);
            queryChecklistAntesdesalirUsuario[i] = antesdesalir;
            i++;
            pintarListaChecklistAntesdesalirUsuario(queryChecklistAntesdesalirUsuario);
        }
    }
}

我正在尝试从 2 个存储中获取数据。有时“光标”获取数据,当“cursor.continue()”执行时正常,但有时它会崩溃。

我不知道该怎么办......

谁能帮帮我? 谢谢!

【问题讨论】:

    标签: javascript windows-8 cordova indexeddb


    【解决方案1】:

    你能解释一下你想要完成什么吗?

    为什么要进行 2 次交易?你可以用一个做任何事情。只需在范围内打开两个对象存储的事务即可。

    为什么是 2 个游标?您可以只使用一个并使用 get 在第二个对象存储中检索您想要的值。您可以在主键或使用索引上执行此操作

    var transaction = db.transaction([storeCLAntesDeSalirUsuarioNombre, storeCLAntesDeSalirNombre], "readonly");
    
    var objectStoreAntesDeSalirUsuario = transaction.objectStore(storeCLAntesDeSalirUsuarioNombre);
    var objectStoreAntesDeSalir = transaction.objectStore(storeCLAntesDeSalirNombre);
    

    【讨论】:

    • 我尝试打开两个对象存储,但没有结果。你能给我举个例子吗?谢谢!
    • 我在帖子中添加了一个示例
    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多