Skip to content

Commit

Permalink
feat: add getItems() overload retrieving all data
Browse files Browse the repository at this point in the history
  • Loading branch information
thgreasi committed Jun 18, 2016
1 parent cf77384 commit 7e7ab0c
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 24 deletions.
52 changes: 52 additions & 0 deletions lib/getitems-generic.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { executeCallback, getItemKeyValue } from './utils';

export function getItemsGeneric(keys, callback) {
var localforageInstance = this;
var promise = new Promise(function(resolve, reject) {
var itemPromises = [];

for (var i = 0, len = keys.length; i < len; i++) {
itemPromises.push(getItemKeyValue.call(localforageInstance, keys[i]));
}

Promise.all(itemPromises).then(function(keyValuePairs) {
var result = {};
for (var i = 0, len = keyValuePairs.length; i < len; i++) {
var keyValuePair = keyValuePairs[i];

result[keyValuePair.key] = keyValuePair.value;
}
resolve(result);
}).catch(reject);
});
executeCallback(promise, callback);
return promise;
}

export function getAllItemsUsingKeys() {
var localforageInstance = this;
return localforageInstance.keys().then(function(keys){
return localforageInstance.getItems(keys);
});
}

export function getAllItemsUsingKeysParallel() {
var localforageInstance = this;
return localforageInstance.keys().then(function(keys){
var itemPromises = [];
for (var i = 0, len = keys.length; i < len; i++) {
itemPromises.push(localforageInstance.getItem(keys[i]));
}
return Promise.all(itemPromises);
});
}

export function getAllItemsUsingIterate() {
var localforageInstance = this;
var accumulator = {};
return localforageInstance.iterate(function(value, key/*, iterationNumber*/) {
accumulator[key] = value;
}).then(function() {
return accumulator;
});
}
34 changes: 10 additions & 24 deletions lib/localforage-getitems.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,21 @@
import localforage from 'localforage';
import { executeCallback, getItemKeyValue } from './utils';
import { executeCallback } from './utils';
import { getItemsGeneric, getAllItemsUsingIterate } from './getitems-generic';
import { getItemsIndexedDB } from './getitems-indexeddb';
import { getItemsWebsql } from './getitems-websql';

export function getItemsGeneric(keys, callback) {
var localforageInstance = this;
var promise = new Promise(function(resolve, reject) {
var itemPromises = [];

for (var i = 0, len = keys.length; i < len; i++) {
itemPromises.push(getItemKeyValue.call(localforageInstance, keys[i]));
}

Promise.all(itemPromises).then(function(keyValuePairs) {
var result = {};
for (var i = 0, len = keyValuePairs.length; i < len; i++) {
var keyValuePair = keyValuePairs[i];

result[keyValuePair.key] = keyValuePair.value;
}
resolve(result);
}).catch(reject);
});
executeCallback(promise, callback);
return promise;
}
export { getItemsGeneric } from './getitems-generic';

export function localforageGetItems(keys, callback) {
var localforageInstance = this;
var currentDriver = localforageInstance.driver();

if (!arguments.length || keys === null) {
var promise = getAllItemsUsingIterate.call(localforageInstance);
executeCallback(promise, callback);
return promise;
}

var currentDriver = localforageInstance.driver();
if (currentDriver === localforageInstance.INDEXEDDB) {
return getItemsIndexedDB.call(localforageInstance, keys, callback);
} else if (currentDriver === localforageInstance.WEBSQL) {
Expand Down

0 comments on commit 7e7ab0c

Please sign in to comment.