Javascript 异步函数不';不执行

Javascript 异步函数不';不执行,javascript,reactjs,react-native,Javascript,Reactjs,React Native,函数的调用: retrieveData = async () => { try { //Retrieving values from AsyncStorage let voiture = await AsyncStorage.getItem('VOITURE') this.state.DBCarName=[]; this.state.DBCarName = JSON.parse(voiture); al

函数的调用:

retrieveData = async () => {
    try {
        //Retrieving values from AsyncStorage
        let voiture = await AsyncStorage.getItem('VOITURE')
        this.state.DBCarName=[];
        this.state.DBCarName = JSON.parse(voiture);
        alert(this.state.DBCarName)
    }
    catch {
        alert('error')
    }
}
我想使用检索函数为DBCarName状态赋值,以便在文本组件中呈现它。问题是,在render方法中调用函数时,它返回null,这可能意味着我的函数没有执行,数组状态为空


知道如何处理吗?

发生这种情况是因为您试图重新分配组件的状态,而您应该使用提供的this.setState函数。 由于您使用的是AsyncStorage和this.state,因此我认为这是一个React本机项目,您的代码应该是这样的:

render() {
                this.retrieveData();

发生这种情况是因为您试图重新分配组件的状态,而应该使用提供的This.setState函数。 由于您使用的是AsyncStorage和this.state,因此我认为这是一个React本机项目,您的代码应该是这样的:

render() {
                this.retrieveData();

否。那么它将是一个带有
错误的警报。可能您只是输入了一个
VOITURE
,或者在默认情况下或通过任何操作将其值设置为null。您没有从该函数返回任何内容。。。不确定问题是什么。谁叫这个。警报是否被调用?请按照上面链接中的指导原则改进您的问题。您不应直接改变此状态。有
setState
方法可以实现这一点。您不应该在
render
中调用涉及副作用的函数,使用相应的生命周期方法或挂钩。也就是说,如果您想在启动时获取一些数据,您应该实现
didMount()
,并在那里修改您的状态。否。然后它将是一个带有
错误的警报
。可能您只是输入了一个
VOITURE
,或者在默认情况下或通过任何操作将其值设置为null。您没有从该函数返回任何内容。。。不确定问题是什么。谁叫这个。警报是否被调用?请按照上面链接中的指导原则改进您的问题。您不应直接改变此状态。有
setState
方法可以实现这一点。您不应该在
渲染中调用涉及副作用的函数,使用相应的生命周期方法或挂钩。也就是说,如果您想在启动时获取一些数据,您应该实现
didMount()
,并在那里修改您的状态。请注意,您应该避免在操作时从渲染函数调用setState。看到这个答案不起作用,当我打印This.state.carnameth时,我仍然得到null。这种情况发生是因为This.setState方法的自然异步性,您应该将console.log(This.state.DBCarName)作为This.setState()的第二个参数传递到回调中,您可以找到许多检查setState文档的示例。另外,如果一直为空,我还假设存储中的VOITURE键不存在。请注意,在OP执行时,应避免从渲染函数调用setState。看到这个答案不起作用,当我打印This.state.carnameth时,我仍然得到null。这种情况发生是因为This.setState方法的自然异步性,您应该将console.log(This.state.DBCarName)作为This.setState()的第二个参数传递到回调中,您可以找到许多检查setState文档的示例。另外,如果一直为空,我还假设存储中的VOITURE密钥不存在。