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

React native asyncstorage get data

我在 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
    }

嗯,AsyncStorage.getItem()是一个promise,所以需要在console.log之前使用await获取token。

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

不要在 ComponentWillMount 中进行 api 调用。 在 ComponentDidMount 中执行此操作。 对于你的问题 - 试试 await 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))
    }