异步变同步

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
}

转载于:https://www.cnblogs.com/shidaying/p/8514830.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值