简单地尝试编写一个'selectAll'方法,该方法将objectStore名称作为参数并返回其包含的键/值对,而不是简单地在对象存储的每次迭代上运行回调。
实质上,在执行indexedDB事务时模仿同步行为。
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();
}
我正在使用Angular,我认为承诺可能就是答案。特别是,$ q.all()在这种情况下是否有用?
答案 0 :(得分:1)
这实际上是一个比我想象的更简单的问题。我将上面的代码切换到以下代码......
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作为参数,然后调用函数返回了对IT&#S; S调用函数的承诺......
db.selectAll(model, function(results) {
deferred.resolve(results);
})
重要的是要注意
$rootScope.$apply(function() {
在使用Angular时回调调用。