Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从indexedDB数据库objectStore返回所有值_Javascript_Angularjs_Indexeddb - Fatal编程技术网

Javascript 从indexedDB数据库objectStore返回所有值

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

只需尝试编写一个“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();
}

我用的是角度,我认为承诺可能是答案。特别是,$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回调。