Advertisement
ReutenkoIvan

Basic store

Oct 20th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Storage {
  2.   constructor() {
  3.     this.storage = {};
  4.   }
  5.  
  6.   list() {
  7.     return Promise.resolve(Object.keys(this.storage))
  8.   }
  9.  
  10.   fetch(key) {
  11.     return new Promise((resolve, reject) => {
  12.       setTimeout(() => {
  13.         const res = this.storage[key];
  14.         res ? resolve(res) : reject('Not found');
  15.       }, 1000)
  16.     })
  17.   }
  18.  
  19.   store(key, data) {
  20.     this.storage[key] = data;
  21.     return Promise.resolve()
  22.   }
  23.  
  24.   destroy(key) {
  25.     delete this.storage[key]
  26.     return Promise.resolve()
  27.   }
  28.  
  29.   storeList(list) {
  30.     list.forEach(({ key, data }) => this.store(key, data));
  31.  
  32.     return Promise.resolve()
  33.   }
  34.  
  35.   destroyStartedWith(beginningOfKey) {
  36.     if(!beginningOfKey) return Promise.resolve()
  37.  
  38.     return this.list()
  39.       .then(keysList => {
  40.         const mask = new RegExp(`^${beginningOfKey}`)
  41.  
  42.         const keysForDeleting = keysList.filter(key => mask.test(key));
  43.         keysForDeleting.forEach(deletingKey => this.destroy(deletingKey));
  44.         //keysForDeleting.forEach(this.destroy, this);
  45.  
  46.         return Promise.resolve()
  47.       })
  48.   }
  49.  
  50.   fetchInTimeOrFail(key, timeout) {
  51.     return new Promise((resolve, reject) => {
  52.       this.fetch(key).then(resolve)
  53.       setTimeout(() => reject('Item with this key not found'), timeout)
  54.     })
  55.   }
  56. }
  57.  
  58. //--------------------------CREATING--------------------------//
  59.  
  60. const storage = new Storage();
  61.  
  62. //------------------------ADDING_ITEMS------------------------//
  63.  
  64. storage.store('boom', 'hallay');
  65. storage.store('doom', 'Quake');
  66. storage.store('cyka', 'Blyad');
  67.  
  68. // storage.list().then(console.log);
  69.  
  70. //--------------------------FETCHING--------------------------//
  71.  
  72. storage.fetch('doom').then((res) => console.log(`fetch  ->   ${res}`));
  73.  
  74. storage.fetchInTimeOrFail('doom', 500)
  75.   .then((res) => console.log(`fetchInTimeOrFail  ->   ${res}`))
  76.   .catch((err) => console.log(`fetchInTimeOrFail  ->  ${err}`))
  77.  
  78. //------------------------MULTI_ADDING------------------------//
  79.  
  80. const list = [{ key: 'vova', data: 'super' }, { key: 'gavno', data: 'pidar' }];
  81.  
  82. storage.storeList(list)
  83.   .then(() => storage.list())
  84.   .then(console.log);
  85.  
  86. //-------------------DESTROY_BY_PART_OF_KEY-------------------//
  87.  
  88.   storage.destroyStartedWith('c')
  89.   .then(() => storage.list())
  90.   .then(console.log)
  91.   .catch(console.log)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement