React Native AsyncStorage本地存储工具类


Posted in Javascript onOctober 24, 2017

利用react-native组件AsyncStorage,通过promise,保存本地数据,具体内容如下

import {AsyncStorage} from 'react-native';

export default class StorageUtil {

  /**
   * 保存一个Json对象
   * @param key
   * @param value
   * @param callback
   */
  static async saveJsonObject(key, value) {
    return await this.saveString(key, JSON.stringify(value));
  }


  /**
   * 获取一个Json对象
   * @param key
   * @param defaultObject
   */
  static async getJsonObject(key, defaultObject) {
    let result=null;
    try{
      result=await this.getString(key,null);
      result=await JSON.parse(result);
    }catch (err){
      if(defaultObject){
        return Promise.resolve(defaultObject);
      }else{
        return Promise.reject(err);
      }
    }
    return result;

  }


  /**
   * 保存一个值
   * @param key
   * @param value
   */
  static async saveString(key, value) {
    if (key != null && value != null) {
      //Key 与Value 都不为空
      try {
         await AsyncStorage.setItem(key, value)
      } catch (err) {
        return Promise.reject(err)
      }
      return Promise.resolve(true);
    } else {
      return Promise.reject({"msg": "Key and value can not be null"});
    }
  }

  /**
   * 获取一个值
   * @param key
   * @param defaultValue
   */
  static async getString(key, defaultValue) {
    let result = null;
    let noDataError = {"msg": "No value found !"};
    if (key != null) {
      result = await AsyncStorage.getItem(key);
      // console.log('get string result',result,defaultValue);
      return result ? result : defaultValue!=null ? defaultValue : Promise.reject(noDataError);
    } else {
      if (defaultValue) {
        return Promise.resolve(defaultValue);
      } else {
        return Promise.reject(noDataError);
      }
    }

  }


  /**
   * 移除一个值
   * @param key
   */
  static async remove(key) {
    let result = true;
    try {
      result = await AsyncStorage.removeItem(key);
    } catch (err) {
      return Promise.reject(err)
    }
    return result;
  }


  /**
   * 获取所有已存储
   */
  static async getAllKeys() {
    let result=true;
    try {
      result = await AsyncStorage.getAllKeys();
    } catch (err) {
      return Promise.reject(err)
    }
    return result;
  }

}

外界调用

保存

StorageUtil.saveJsonObject(KEY_LOCAL_USER_INFO, user);

读取

StorageUtil.getJsonObject(KEY_LOCAL_USER_INFO).then(data=>{console.log(data))}

清除

StorageUtil.remove(KEY_LOCAL_USER_INFO)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery.validate 常用方法及需要注意的问题
Mar 20 Javascript
js中通过split函数分割字符串成数组小例子
Sep 21 Javascript
jquery()函数的三种语法介绍
Oct 09 Javascript
jquery实现定时自动轮播特效
Dec 10 Javascript
js去字符串前后空格的实现方法
Feb 26 Javascript
jquery 动态增加删除行的简单实例(推荐)
Oct 12 Javascript
JS时间控制实现动态效果的实例讲解
Jul 31 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
Aug 14 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
Dec 26 Javascript
详解如何在你的Vue项目配置vux
Jun 04 Javascript
分享vue里swiper的一些坑
Aug 30 Javascript
angular的输入和输出的使用方法
Sep 22 Javascript
React Native验证码倒计时工具类分享
Oct 24 #Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 #Javascript
React Native实现地址挑选器功能
Oct 24 #Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
Oct 24 #Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 #Javascript
Vue v2.5 调整和更新不完全问题
Oct 24 #Javascript
Vue.js 2.5新特性介绍(推荐)
Oct 24 #Javascript
You might like
附件名前加网站名
2008/03/23 PHP
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
js实现秒表计时器
2019/12/16 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
Django中的ajax请求
2018/10/19 Python
django 控制页面跳转的例子
2019/08/06 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
如何理解transaction事务的概念
2015/05/27 面试题
2014小学语文教师个人工作总结
2014/12/03 职场文书
《鲸》教学反思
2016/02/23 职场文书