反应本机异步存储获取数据

时间:2020-04-13 12:32:02

标签: javascript react-native asyncstorage

我在react-native中使用componentWillMount从API获取数据。但是,当我尝试获取登录时存储的令牌时。它行不通。我不知道是什么问题/

componentWillMount(){

        let token = this.getData
        fetch('http://192.168.0.125:8887/api/auth/activities/index',{
            method: 'POST',
            headers:{
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'Authorization': 'Bearer '. token,
            },
        })
        .then((response) => response.json())

        .then((res) => {
            //console.log(res)

        })
        .catch((e) => console.log('Error: ', e))
    }

    getData = async () => {
        let token =''
        try{
            token = AsyncStorage.getItem('id_token')
            console.log(token)
        }catch (error) {
            console.log('AsyncStorage error: ' + error.message);
        }
        return token
    }

2 个答案:

答案 0 :(得分:2)

好吧,AsyncStorage.getItem()是一个承诺,因此您需要在console.log之前使用await获取令牌。

const token = await AsyncStorage.getItem('id_token')

答案 1 :(得分:1)

不要在ComponentWillMount内部进行api调用。 在ComponentDidMount内部执行此操作。 对于您的问题- 尝试等待AsyncStorage.getItem('id_token'),因为AsyncStorage是一个承诺。

或者您可以

componentDidMount(){
    AsyncStorage.getItem('id_token').then(this.getData)
}



getData=(token)=>{
   fetch('http://192.168.0.125:8887/api/auth/activities/index',{
        method: 'POST',
        headers:{
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'Authorization': 'Bearer '+ token,
        },
    })
    .then((response) => response.json())

    .then((res) => {
        //console.log(res)

    })
    .catch((e) => console.log('Error: ', e))
    }