javascript - 在索引数据库中使用游标

标签 javascript jquery indexeddb

下面是我的indexeddb(IDB) objectStore名称及其调用方法。

我想要的是从 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;
};

我收到如图所示的错误。即使对象存储中没有值,游标仍在运行,并且显示 Value can not be set to null。

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

基本上我是向变量添加一些数字。 screenshot-1 screenshot-2

最佳答案

在这一行中,您将获得光标:

var cur = event.target.result; 

在这里,您在使用光标之前正确检查光标是否不为空:

if (cur) {  

但是这一行假设 event.target.result 不为空:

get_me = event.target.result.value.tax_master_id;

因此,当光标到达其范围末尾时,event.target.result 为 null,这会在确切的行上显示“无法读取 null 的属性‘值’”错误控制台告诉你。

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

关于javascript - 在索引数据库中使用游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40726859/

相关文章:

javascript - Node.js 视频的完整路径

javascript - 如何使用jquery将一个元素转换为2个元素

javascript - 通过单击图像将文本插入输入字段

database - 我如何看待 "IndexedDB"?

javascript - 无法使用 Firefox 将 () 数据放入 indexeddb 数据库

javascript - 功能模块化的 polymer 脚本唯一组件

javascript - FancyBox 3 缩放按钮

html - 如何在 HTML5 Indexed Db 中使用连接?

javascript - 对 3 个嵌套数组感到困惑

javascript - 在通过 jquery 或 ajax 加载内容之前显示加载图像