Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Storage {
- constructor() {
- this.storage = {};
- }
- list() {
- return Promise.resolve(Object.keys(this.storage))
- }
- fetch(key) {
- return new Promise((resolve, reject) => {
- setTimeout(() => {
- const res = this.storage[key];
- res ? resolve(res) : reject('Not found');
- }, 1000)
- })
- }
- store(key, data) {
- this.storage[key] = data;
- return Promise.resolve()
- }
- destroy(key) {
- delete this.storage[key]
- return Promise.resolve()
- }
- storeList(list) {
- list.forEach(({ key, data }) => this.store(key, data));
- return Promise.resolve()
- }
- destroyStartedWith(beginningOfKey) {
- if(!beginningOfKey) return Promise.resolve()
- return this.list()
- .then(keysList => {
- const mask = new RegExp(`^${beginningOfKey}`)
- const keysForDeleting = keysList.filter(key => mask.test(key));
- keysForDeleting.forEach(deletingKey => this.destroy(deletingKey));
- //keysForDeleting.forEach(this.destroy, this);
- return Promise.resolve()
- })
- }
- fetchInTimeOrFail(key, timeout) {
- return new Promise((resolve, reject) => {
- this.fetch(key).then(resolve)
- setTimeout(() => reject('Item with this key not found'), timeout)
- })
- }
- }
- //--------------------------CREATING--------------------------//
- const storage = new Storage();
- //------------------------ADDING_ITEMS------------------------//
- storage.store('boom', 'hallay');
- storage.store('doom', 'Quake');
- storage.store('cyka', 'Blyad');
- // storage.list().then(console.log);
- //--------------------------FETCHING--------------------------//
- storage.fetch('doom').then((res) => console.log(`fetch -> ${res}`));
- storage.fetchInTimeOrFail('doom', 500)
- .then((res) => console.log(`fetchInTimeOrFail -> ${res}`))
- .catch((err) => console.log(`fetchInTimeOrFail -> ${err}`))
- //------------------------MULTI_ADDING------------------------//
- const list = [{ key: 'vova', data: 'super' }, { key: 'gavno', data: 'pidar' }];
- storage.storeList(list)
- .then(() => storage.list())
- .then(console.log);
- //-------------------DESTROY_BY_PART_OF_KEY-------------------//
- storage.destroyStartedWith('c')
- .then(() => storage.list())
- .then(console.log)
- .catch(console.log)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement