React-Native AsyncStorage异步变同步

AsyncStorage使用
/**
 * AsyncStorage是一个简单的、异步的、持久化的Key-Value存储系统,
 */

'use strict';

import React from 'react';
import ReactNative, {AsyncStorage} from 'react-native';
class StorageUtil {
    /**
     * 根据key获取json数值
     * @param key
     * @returns {Promise<TResult>}
     */
    static get(key) {
        return AsyncStorage.getItem(key).then((value) => {
            if (value && value != '') {
                const jsonValue = JSON.parse(value);
                return jsonValue;
            } else {
                return null
            }
        }).catch(() => {
            return null
        });
    }

    /**
     * 保存key对应的json数值
     * @param key
     * @param value
     * @returns {Promise<string>}
     */
    static save(key, value) {
        return AsyncStorage.setItem(key, JSON.stringify(value));
    }

    /**
     * 更新key对应的json数值
     * @param key
     * @param value
     * @returns {Promise<TResult>|Promise.<TResult>|Promise<T>}
     */
    static update(key, value) {
        return AsyncStorage.get(key).then((item) => {
            value = typeof value === 'string' ? value : Object.assign({}, item, value);
            return AsyncStorage.setItem(key, JSON.stringify(value));
        });
    }

    /**
     * 删除key对应json数值
     * @param key
     * @returns {Promise<string>}
     */
    static delete(key) {
        return AsyncStorage.removeItem(key);
    }

    /**
     * 删除所有配置数据
     * @returns {Promise<string>}
     */
    static clear() {
        return AsyncStorage.clear();
    }
}

export default StorageUtil;


    /***** Storage  *************************************************** */

    /**
     * 获取key对应的Storage数据
     * @param key stirng类型
     * @returns {*}
     */
    get(key) {
        return StorageUtil.get(key);
    }

    /**
     * 保存key对应的Storage数据
     * @param key
     * @param value
     * @returns {*}
     */
    save(key, value) {
        return StorageUtil.save(key, value);
    }

    /**
     * 删除key对应的Storage数据
     * @param key
     * @returns {*}
     */
    delete(key) {
        return StorageUtil.delete(key);
    }

    /**
     * 清除所有的Storage数据
     * @returns {*}
     */
    clear() {
        return StorageUtil.clear();
    }

存储获取

  • 需要使用async await才能同步获取
async getStorage() {
        let logic = await super.get(logic);
        if (!logic) {
            // 如果是首次登录, 跳转到引导界面
            name = 'Guide';
            component = Guide
        } else {
            if (!logic.isGuide) {
                // 如果没有引导
                name = 'Guide';
                component = Guide;
            } else if (!logic.isLogin) {
                // 如果没有登录
                name = 'Login';
                component = Login;
            } else {
                name = 'Main';
                component = Main;
            }
        }
        this.setState({
            name: name,
            component: component,
            params: params,
            modalVisible: false
        });
        this.timer && clearTimeout(this.timer);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,282评论 19 139
  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 12,055评论 5 22
  • 一.非阻塞和异步 借用知乎用户严肃的回答在此总结下,同步和异步是针对消息通信机制,同步代表一个client发出一个...
    Daniel_adu阅读 5,839评论 0 8
  • 本文主要介绍了在 C# 中使用 Async 和 Await 关键字进行异步编程的心得,是入门级的学习笔记。 题解:...
    BossOx阅读 11,069评论 4 27
  • 框架提出的背景 ES6/7带来的变革 自ES6确定和ES7中async/await开始普及,Node的发展变得更加...
    宫若石阅读 12,740评论 1 14

友情链接更多精彩内容