setitems-websql.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { getSerializerPromise, executeCallback, forEachItem } from './utils';
  2. export function setItemsWebsql(items, keyFn, valueFn, callback) {
  3. var localforageInstance = this;
  4. var promise = new Promise(function(resolve, reject) {
  5. localforageInstance.ready().then(function() {
  6. return getSerializerPromise(localforageInstance);
  7. }).then(function(serializer) {
  8. // Inspired from @lu4 PR mozilla/localForage#318
  9. var dbInfo = localforageInstance._dbInfo;
  10. dbInfo.db.transaction(function(t) {
  11. var query = 'INSERT OR REPLACE INTO ' +
  12. dbInfo.storeName +
  13. ' (key, value) VALUES (?, ?)';
  14. var itemPromises = forEachItem(items, keyFn, valueFn, function(key, value) {
  15. return new Promise(function(resolve, reject){
  16. serializer.serialize(value, function(value, error) {
  17. if (error) {
  18. reject(error);
  19. } else {
  20. t.executeSql(query,[key, value], function() {
  21. resolve();
  22. }, function(t, error) {
  23. reject(error);
  24. });
  25. }
  26. });
  27. });
  28. });
  29. Promise.all(itemPromises).then(function(){
  30. resolve(items);
  31. }, reject);
  32. }, function(sqlError) {
  33. reject(sqlError);
  34. }/*, function() {
  35. if (resolving) {
  36. resolve(items);
  37. }
  38. }*/);
  39. }).catch(reject);
  40. });
  41. executeCallback(promise, callback);
  42. return promise;
  43. }