zoukankan      html  css  js  c++  java
  • 异步变同步

    react-native 项目中使用了 react-native-storage

    react-native-storage 正常取值是一个异步操作

    storage.load({
                key: 'loginState',
            })
                .then(ret => {
                    let params = {
                        token: ret.token,
                        userId: ret.userId,
                    }
    
                })
                .catch(error => {
    
                })
    

    异步变同步 async await 配对使用

    async componentDidMount() {
            let isLogin = await this.isLogin()
            if (isLogin) {
                // fetch username
            } else {
                // jump to login
            }
        }
    
    async isLogin() {
            try {
                let ret = await storage.load({
                    key: Common.loginState,
                })
                return ret ? true : false
            } catch (error) {
                console.log('00')
                return false
            }
        }
    

    容易犯错的地方

     componentDidMount() {
            let isLogin = this.isLogin() // 返回的是一个promise,promise里封装的有我们返回的结果, 但是没法直接同步用
            if (isLogin) {
                // fetch username
            } else {
                // jump to login
            }
        }
    
    async isLogin() {
            try {
                let ret = await storage.load({
                    key: Common.loginState,
                })
                return ret ? true : false
            } catch (error) {
                console.log('00')
                return false
            }
        }
    

    错误二

     componentDidMount() {
            let isLogin = this.isLogin() // 返回的永远是3, 因为是异步,在进入 then, catch 之前,isLogin就调用完毕了,执行到 return 3结束
            if (1) {
                // fetch username
            } else {
                // jump to login
            }
        }
    isLogin() {
            storage.load({
                key: 'loginState',
            })
                .then(ret => {
                    return 1
                })
                .catch(error => {
                    return 2
                })
            return 3
    }
    
  • 相关阅读:
    JavaScript_01简介,基本语法,运算符
    JAVA_内部类
    JAVA_接口_默认方法&静态方法
    软件工程_01面向对象分析
    mybatis_16逆向工程
    mybatis_15整合ehcache
    mybatis_14二级缓存
    mybatis_13一级缓存
    mybatis_12延时加载_懒加载
    JWT如何在Spring Cloud微服务系统中在服务相互调时传递
  • 原文地址:https://www.cnblogs.com/shidaying/p/8514830.html
Copyright © 2011-2022 走看看