IndexedDB参考错误:db意外行为

时间:2017-07-02 17:04:13

标签: indexeddb

这是我的程序的伪代码:

for(var res in response.data){
        alert("In required function!");
        var request = db.transaction(["movies"],"readwrite").objectStore("movies").add({id:res,movie_title:JSON.stringify(response.data[res]["movie_title"])});
        request.onsuccess = function(event){
                                // alert("Data "+response.data[res]+" entered!!");
        }
        request.onerror = function(event){
            // alert("Unable to add!");
        }
}

问题是,如果我删除alert("In required function!");行,则不会显示任何错误。 任何人都能解释其背后的原因吗?

1 个答案:

答案 0 :(得分:0)

您正在循环中定义一个函数。它不像你期望的那样工作。有一些方法可以在循环中正确定义函数,但完全避免这种编程风格要好得多。另外,请注意定义调用函数之间的区别。

第2点,indexedDB是异步的。 window.alert是同步阻塞函数。通过阻止我的意思是浏览器等待你点击确定。虽然可以将两者结合使用,但我不推荐它。请改用console.log,这是非阻塞的。浏览器不会每次都等待。

以下是另一种避免此问题的编程方式的伪代码示例:

function foo() {
  for(var res in response.data) {
    bar(response.data[res]);
  }
}

function bar(res) {
    console.log("In required function!");
    var request =  ...add(res['movie_title']);
    request.onsuccess = function(event){
      console.log("Data entered!!", res);
    };
    request.onerror = function(event){
      console.log("Unable to add!");
    };

}