1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/songjinyang-everyday

 / Детали:

Вопрос 40: Как реализовать функцию истечения времени при имитации localStorage Для реализации функции...

Предстоит сделать
Владелец
Создано  
27.04.2025

истечения времени при имитации localStorage можно использовать следующий подход: 1. При сохранении данных добавлять поле с временем истечения (например, через Date.now() + срок хранения в миллисекундах). 2. При получении данных проверять, не истекло ли время их хранения. Если истекло, данные удаляются. 3. Периодически (например, каждые несколько минут) проверять все сохраненные данные на истечение времени и удалять устаревшие. Пример кода: javascript const mockStorage = {}; function setItem(key, value, ttl) { const now = Date.now(); const expirationTime = now + ttl; mockStorage[key] = { value, expirationTime }; } function getItem(key) { const item = mockStorage[key]; if (!item) return null; if (item.expirationTime < Date.now()) { delete mockStorage[key]; return null; } return item.value; } function clearExpiredItems() { const now = Date.now(); for (const key in mockStorage) { if (mockStorage[key].expirationTime < now) { delete mockStorage[key]; } } } // Пример использования setItem('username', 'John Doe', 1000 * 60 * 60 * 24); // 24 часа console.log(getItem('username')); // 'John Doe' setTimeout(() => { clearExpiredItems(); console.log(getItem('username')); // null }, 1000 * 60 * 60 * 24 + 1); Этот подход позволяет эффективно управлять временем жизни данных в имитации localStorage.

     let obj = {// Сохраняется здесь
            cc: {},
            setItem: function (key, value, time) {
                this.cc[key] = value
                if (time) {
                    setTimeout(() => {
                        this.removeItem(key)
                    }, time)
                }
            },
            getItem: function (key) {
                return this.cc[key] || null
            },
            removeItem: function (key) {
                delete this.cc[key]
            },
            clear() {
                this.cc = {}
            }
        }
        obj.setItem('time', 'время', 3000)
        console.log(obj.getItem('time'))
        setTimeout(() => {
            console.log(obj.getItem('time'))
        }, 4000)
        // Другой способ записи
        const cd = (function () {
            let cc = {}       // Сохраняется здесь
            return {
                setItem: function (key, value, time) {
                    cc[key] = value
                    if (time) {
                        console.log(typeof time)
                        if (typeof time !== 'number') throw 'время должно быть числом'
                        setTimeout(res => {
                            this.removeItem(key)
                        })
                    }
                },
                getItem: (key) => cc[key] || null,
                removeItem: (key) => delete cc[key],
                clear: () => cc = {}
            }
        })()
        Object.defineProperty(Object.prototype, 'my', {
            value: cd
        })
        let ddd = '哇咔咔'
        let zzz = 'zzzzz'
        my.setItem('xx', ddd)
        my.setItem('zzz', zzz, 2000)
        console.log(my.getItem('xx'))
        my.removeItem('xx')
        console.log(my.getItem('xx'))
        console.log(my.getItem('zzz'))
        my.clear()
        console.log(my.getItem('zzz'))
        setTimeout(res => {
            console.log(my.getItem('zzz'))
        }, 4000)

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/songjinyang-everyday.git
git@api.gitlife.ru:oschina-mirror/songjinyang-everyday.git
oschina-mirror
songjinyang-everyday
songjinyang-everyday