通过游标实现oncomplete的正确方法

时间:2015-12-01 10:36:23

标签: indexeddb

美好的一天,我在执行关于打开游标的oncomplete方法时遇到了一些困难。由于座椅是异步的,因此他提出请求并参与代码的下一部分,并且无法观察函数外部函数的返回。有更好的方法来做到这一点?或者如何解决退货问题?实现oncomplete?代码下方:

 for(var i = 0; i < tam; i++){
                var objectStorePresenca = db.transaction("tbl_PRESENCA").objectStore("tbl_PRESENCA");
                var indexPresenca = objectStorePresenca.index("COD_IDENT_REUNI");
                indexPresenca.openCursor(objetoReuniao[i].COD_IDENT_REUNI).onsuccess = function (event){
                    var vetor = event.target.result;
                    if (vetor) {
                        var obj = new Object();
                    obj.CODIGO_REUNIAO = vetor.value.COD_IDENT_REUNI;
                    obj.COD_IDENT_PESSO = vetor.value.COD_IDENT_PESSO;
                    obj.FLG_IDENT_PRESE = vetor.value.FLG_IDENT_PRESE;
                    ausentes.push(obj);    

                    vetor.continue();
                }/*else{
                    console.log(ausentes);
                    console.log(objetoReuniao);
                    // presentes.push(objetoReuniao);
                    // console.log(presentes);
                }*/
            }

        }

谢谢

1 个答案:

答案 0 :(得分:2)

我不知道你是否在询问如何观察在事务中触发的“完整”事件,或者如何在不能简单地返回值的情况下编写异步代码。

#1:如何观察“完整”事件。

var tx = db.transaction("tbl_PRESENCA");
tx.oncomplete = function() {
  console.log("transaction is complete");
};
var objectStorePresenca = tx.objectStore("tbl_PRESENCA");

#2:如何从异步代码中返回值。

function yourFunction(callback) {    
  var objectStorePresenca = ...; 
  var indexPresenca = ...;
  indexPresenca.openCursor(...).onsuccess = function (event){
    var vetor = event.target.result;
    if (vetor) {
      ...
      vetor.continue();
    } else {
      callback();
    }
  };
}

yourFunction(function() {
  console.log("cursor has hit end of range");
});