• 异步变同步


    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
    }
    
  • 相关阅读:
    JAVA web数据库登录界面
    JAVA web之相关名词大调查
    继承与多态课后
    第六周课后作业 02
    凯撒密文问题
    定义一个类,使用静态和构造随时知道定义了几个变量(第五周课后01)
    NAIPC2018
    [学习笔记]网络流
    Rikka with Prefix Sum
    Traffic Network in Numazu
  • 原文地址:https://www.cnblogs.com/shidaying/p/8514830.html
Copyright © 2020-2023  润新知