这是我的程序的伪代码:
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!");
行,则不会显示任何错误。
任何人都能解释其背后的原因吗?
答案 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!");
};
}