utils.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. export function getSerializerPromise(localForageInstance) {
  2. if (getSerializerPromise.result) {
  3. return getSerializerPromise.result;
  4. }
  5. if (!localForageInstance || typeof localForageInstance.getSerializer !== 'function') {
  6. return Promise.reject(new Error(
  7. 'localforage.getSerializer() was not available! ' +
  8. 'localforage v1.4+ is required!'));
  9. }
  10. getSerializerPromise.result = localForageInstance.getSerializer();
  11. return getSerializerPromise.result;
  12. }
  13. export function getDriverPromise(localForageInstance, driverName) {
  14. getDriverPromise.result = getDriverPromise.result || {};
  15. if (getDriverPromise.result[driverName]) {
  16. return getDriverPromise.result[driverName];
  17. }
  18. if (!localForageInstance || typeof localForageInstance.getDriver !== 'function') {
  19. return Promise.reject(new Error(
  20. 'localforage.getDriver() was not available! ' +
  21. 'localforage v1.4+ is required!'));
  22. }
  23. getDriverPromise.result[driverName] = localForageInstance.getDriver(driverName);
  24. return getDriverPromise.result[driverName];
  25. }
  26. export function executeCallback(promise, callback) {
  27. if (callback) {
  28. promise.then(function(result) {
  29. callback(null, result);
  30. }, function(error) {
  31. callback(error);
  32. });
  33. }
  34. }
  35. export function forEachItem(items, keyFn, valueFn, loopFn) {
  36. function ensurePropGetterMethod (propFn, defaultPropName) {
  37. var propName = propFn || defaultPropName;
  38. if ((!propFn || typeof propFn !== 'function') &&
  39. typeof propName === 'string') {
  40. propFn = function(item){ return item[propName]; };
  41. }
  42. return propFn;
  43. }
  44. var result = [];
  45. // http://stackoverflow.com/questions/4775722/check-if-object-is-array
  46. if (Object.prototype.toString.call(items) === '[object Array]') {
  47. keyFn = ensurePropGetterMethod(keyFn, 'key');
  48. valueFn = ensurePropGetterMethod(valueFn, 'value');
  49. for (var i = 0, len = items.length; i < len; i++) {
  50. var item = items[i];
  51. result.push(loopFn(keyFn(item), valueFn(item)));
  52. }
  53. } else {
  54. for (var prop in items) {
  55. if (items.hasOwnProperty(prop)) {
  56. result.push(loopFn(prop, items[prop]));
  57. }
  58. }
  59. }
  60. return result;
  61. }