Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在索引数据库中使用游标_Javascript_Jquery_Indexeddb - Fatal编程技术网

Javascript 在索引数据库中使用游标

Javascript 在索引数据库中使用游标,javascript,jquery,indexeddb,Javascript,Jquery,Indexeddb,下面是我的indexeddb(IDB)对象存储名称及其调用方法 我想要的是从objectStore获取值,并根据条件匹配的值将这些值添加到变量中 var item_id = []; var db; function displayNotes(filter) { var line = 0; var transaction = db.transaction(["frp_item_master"], "readonly"); var itemsname =[]; va

下面是我的indexeddb(IDB)对象存储名称及其调用方法

我想要的是从objectStore获取值,并根据条件匹配的值将这些值添加到变量中

var item_id = [];
var db;
function displayNotes(filter) {
    var line = 0; 
    var transaction = db.transaction(["frp_item_master"], "readonly");
    var itemsname =[];
    var itemsqty =[];
    var itemsprice =[];
    var itemsdisc =[];
    var itemstax =[];

  var handleResult = function(event) {  
      var cursor = event.target.result;
      var price_with_tax;
      var i = 0;
       i++;
      if (cursor) {  
           ++line;
                if (cursor.value.item_id == 20008)
                {
                item_id.push(event.target.result.value.item_id);
                //and other array push here

                //call function                      
                price_with_tax = (get_tax(itemstax)/100)*itemsprice;

                }   
        cursor.continue(); 
        }  
      else {  
      //error
      }  
    };  
然后在创建我的函数后,在上面的方法中调用该函数

function get_tax(p_tax_master_id){
    var get_me;
    var total_tax_rate = 0;

    var transaction = db.transaction(["frp_tax_master"], "readonly");
    var objectStore = transaction.objectStore('frp_tax_master');

    objectStore.openCursor().onsuccess = function(event){  

    var cur = event.target.result; 
    get_me = event.target.result.value.tax_master_id;
    console.log('get_me'+get_me);
    if (cur) {  
        if (get_me == 2008)
            {
              total_tax_rate += event.target.result.value.rate;
              console.log("total tax"+total_tax_rate);
            }
       cur.continue(); 
            }  
      else {  
          console.log('else'+get_me);
          } 
    };  
    return total_tax_rate;
};
我得到了错误,如图所示。即使对象存储中没有值,并且显示值不能设置为null,游标仍在运行

我们可以循环遍历所有记录,直到最后一个值被提取出来,然后从游标退出,将该值分配给变量

基本上,我是在给变量添加一些数字。

在这一行中,您可以看到光标:

var cur = event.target.result; 
在这里,您可以在使用光标之前正确检查光标是否为空:

if (cur) {  
但此行假定
event.target.result
不为空:

get_me = event.target.result.value.tax_master_id;
因此,当光标到达其范围的末尾时,
event.target.result
为null,这会在控制台告诉您的确切行上显示“无法读取null属性'value'的错误”


考虑将该行移动到
if(cur)
块中。

除了Joshua所说的之外,
onsuccess
方法是异步的,因此您的
get\u tax
函数将始终返回0

考虑以下情况:

function get_tax(p_tax_master_id, cb) {
    var get_me;
    var total_tax_rate = 0;

    var transaction = db.transaction(["frp_tax_master"], "readonly");
    var objectStore = transaction.objectStore('frp_tax_master');

    objectStore.openCursor().onsuccess = function(event){  
        var cur = event.target.result; 
        console.log('get_me'+get_me);

        if (cur) {
            get_me = event.target.result.value.tax_master_id;

            if (get_me == 2008) {
                total_tax_rate += event.target.result.value.rate;
                console.log("total tax"+total_tax_rate);
            }

            cur.continue(); 
        }  else {  
            console.log('else'+get_me);

            cb(null, total_tax_rate);
        } 
    };
};
您可能还更喜欢使用库,例如,以便执行以下查询:

var db = new zango.Db('db_name', ['frp_tax_master']);
var frp_tax_master = db.collection('frp_tax_master');

function get_tax(p_tax_master_id, cb) {
    frp_tax_master.find({
        tax_master_id: 2008
    }).group({
        total_tax_rate: { $sum: '$rate' }
    }).toArray((error, docs) => {
        if (error || !docs[0]) { cb(error); }
        else { cb(null, docs[0].total_tax_rate); }
    });
}

以后,请尝试包含错误消息的文本,而不是截图。另外,请在您似乎发生错误的地方重复代码行,而不是截图。谢谢