https://www.npmjs.com/package...这个库扩展了localStroage。在设置item的时候,会设置另外一个key来存储过期时间。取数据时,判断是否过期,移除元素。UsageexpiredStorage=newExpiredStorage();//60秒后过期//获取数据,如果过期则返回nullvaritem=expiredStorage.getItem("test");//获取剩余时间vartimeLeft=expiredStorage.getTimeLeft("test");//检查key是否为已过期varisExpired=expiredStorage.isExpired("test");//获取所有的key(如果includeExpired为true,即使是删除的还没有过期的key也会被返回)varkeys=expiredStorage.keys(includeExpired);//返回这个键的详细信息vardata=expiredStorage.peek("test");构造函数源码解读,this是一些边界判断,没什么functionExpiredStorage(storage){...this._storage=storage;}重点是setItem和getItemExpiredStorage.prototype={//基本stroage类,在构造函数中赋值_storage:null,//时间戳key的前缀_expiration_key_prefix:"__expired_storage_ts__",//获取当前时间单位秒getTimestamp:function(){returnMath.floor(((newDate).getTime())/1000);},setItem:function(key,value,expiration){//设置项目varret=this._storage.setItem(key,value);//存储这个key对应的过期时间(只有expiration有值时)if(expiration){this.updateExpiration(key,expiration);返回ret;},//更新key的过期时间,新key位时间戳前缀加上旧key到期);},getItem:function(key){//判断是否过期,过期则删除此项,返回nullif(this.isExpired(key)){this.removeItem(key);返回空值;}//如果没有过期,返回null正常返回returnthis._storage.getItem(key);},//判断是否过期isExpired:function(key){vartimeLeft=this.getTimeLeft(key);返回timeLeft!==null&&timeLeft<=0;},//获取剩余时间getTimeLeft:function(key){//通过时间戳key获取过期时间varexpireTime=parseInt(this._storage.getItem(this._expiration_key_prefix+key));//获取值并返回剩余时间if(expireTime&&!isNaN(expireTime)){returnexpireTime-this.getTimestamp();}//如果没有获取到值则返回nullreturnnull;},//同时删除键和时间戳键removeItem:function(key){varret=this._storage.removeItem(key);this._storage.removeItem(this._expiration_key_prefix+key);返还;},}实现一个比较麻烦的需求很简单。这个仓库已经四年没有更新了。还保持着每周1k左右的下载量,佩服!!
