Javascript 从indexedDB数据库objectStore返回所有值
只需尝试编写一个“selectAll”方法,将objectStore名称作为参数并返回其包含的所有键/值对,而不是简单地在对象存储的每个迭代上运行回调 本质上,在执行indexedDB事务时模拟同步行为Javascript 从indexedDB数据库objectStore返回所有值,javascript,angularjs,indexeddb,Javascript,Angularjs,Indexeddb,只需尝试编写一个“selectAll”方法,将objectStore名称作为参数并返回其包含的所有键/值对,而不是简单地在对象存储的每个迭代上运行回调 本质上,在执行indexedDB事务时模拟同步行为 var results = [] request.onsuccess = function(e) { var result = e.target.result; if (!result) { //I could call successcallback he
var results = []
request.onsuccess = function(e) {
var result = e.target.result;
if (!result) {
//I could call successcallback here with JUST this 'row' of data
successCallback(result);
return;
}
//I could push the results into an array here, but I would need to 'wait' until all the onSuccess methods have fired before returning it.
results.push(result.value);
result.continue();
}
我用的是角度,我认为承诺可能是答案。特别是,$q.all()在这个例子中有帮助吗?这实际上是一个比我想象的更简单的问题。我把上面的代码改成了下面的
function selectAll(model, successCallback) {
...
request.onsuccess = function(e) {
var result = e.target.result;
if (result) {
results.push(result.value);
result.continue();
} else {
$rootScope.$apply(function() {
successCallback(results);
});
}
}
}
我使用了一个successCallback作为参数,调用函数然后返回一个承诺给它的调用函数
db.selectAll(model, function(results) {
deferred.resolve(results);
})
重要的是要注意
$rootScope.$apply(function() {
使用Angular时围绕回调调用。另一种可能是使用事务对象的oncomplete回调。