await在react-native

时间:2018-05-20 15:58:25

标签: react-native

我有以下代码

async _onPress() {

            NetInfo.isConnected.fetch().then(isConnected => {

                if (isConnected) {
                    fetch(apiURL + '/login', {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/json'
                        },
                        body: JSON.stringify({
                            username: this.props.username,

                            password: this.props.password
                        })
                    })
                        .then((response) => response.json())
                        .then((responseJson) => {


                            if (responseJson.status === 'success') 
    //I am getting error here
                                await AsyncStorage.setItem('token', responseJson.token);

                                //moving on to the main screen if server return success
                                Actions.MainScreen();


                            } else {
                                Toast.show({
                                    text: "Wrong username or password!",
                                    type: "danger"
                                });
                            }
                        })
                        .catch((error) => {
                              console.log(error);
                        });

                } else {

                    Toast.show({
                        text: "Please Connect To Internet",
                        type: "danger"
                    });

                }

            });

        }

我正在尝试使用AsyncStorage保存我从API服务器收到的令牌。我收到以下错误

    Expression statement is not assignmentor call

RefrenceError:await is not defined

当我尝试在该位置使用await时。

但是当在函数开头使用相同的代码时,我没有错误。

我不知道出了什么问题。在异步等待中是不允许的?我对这些并不太熟悉。

1 个答案:

答案 0 :(得分:0)

如果_onPress调用某些异步函数并且您希望等待所有这些函数完成,则必须在每个函数前面放置一个“await”。此外,每个异步函数(包括异步回调函数)也必须声明为async

完整的代码:

async _onPress() {
    **await** NetInfo.isConnected.fetch().then(**async** (isConnected) => {
        if (isConnected) {
            **await** fetch(apiURL + '/login', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                    username: this.props.username,
                    password: this.props.password
                })
            })
            .then((response) => response.json())
            .then(**async** (responseJson) => {
                if (responseJson.status === 'success') {
                    **await** AsyncStorage.setItem('token', responseJson.token);
                    Actions.MainScreen();
                } else {
                    Toast.show({
                        text: "Wrong username or password!",
                        type: "danger"
                    });
                }
            })
        }
    })
}