我正在使用IndexedDB角项目。由于IndexedDB是异步的,我有一些麻烦链接到数据库的无限数量的异步调用(这听起来很糟糕,我知道:))。链接无限数量的angularjs异步调用IndexedDB
我的数据库架构包含一个tasks
店,像这样:
var taskStore = db.createObjectStore('task', {
keyPath: 'id'
});
给定的任务ID数组,我需要检索所有对应于那些IDS的任务。我有一个工厂“DB”服务与数据层处理,和我使用的承诺,使异步调用:
angular.module('myapp', []).factory(db, function()){
return {
findTaskById: function(taskid){ //retrieves in a promise a single task, by its id
//...async code, removed for brevity
}
};
});
由于IndexedDB的不会让我用“OR”条款查询,我计划将无限期数量的呼叫链接到findTaskById
方法,每个需要的任务ID一个。
示例:要获取4个任务,我的代码是:
var taskIds = [100,101,102,103];
var results = [];
var deferred = $q.defer();
db.findTaskById(taskIds[0])
.then(function(task){
results.push(task);
return db.findTaskById(taskIds[1])
.then(function(task2){
results.push(task);
return db.findTaskById(taskIds[2])
.then(... etc
//later in the code, return everything in a single promise
deferred.resolve(results);
上面的代码是可怕的和不知道的第一任务ID的数量不工作。
我的问题是:
问题1 我怎么能串联多个,无限异步调用,并返回一个包含所有结果的单一的承诺?
问题2 如何有效地对确实这个问题值得它自己的问题keyPath
场or子句查询IndexedDB的。
谢谢。
我想你应该问两个不同的问题。 – Bergi 2014-10-06 23:38:51