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

Correct method to implement the oncomplete through a cursor

你好,我在实现打开游标的oncomplete方法时遇到了一些困难。由于 seat 是异步的,他对代码的下一部分进行申请和分部,并且不可能在函数外观察到函数的 return。会有更好的方法吗?或者如何解决 return 的问题?作为实现 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);
                }*/
            }

        }

谢谢

我不知道您是在问如何观察在事务中触发的 "complete" 事件,还是在不能简单地 return 一个值的情况下如何编写异步代码。

#1:如何观察"complete"事件。

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

#2:如何 return 来自异步代码的值。

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");
});