异步变同步

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
}
posted @ 2018-03-06 15:58  shidaying  阅读(1673)  评论(0编辑  收藏  举报