React-Native:如果对象未定义,则传递if语句

时间:2016-08-29 21:58:40

标签: javascript reactjs react-native

所以我有一个小的API登录,我现在的问题是如果登录没有工作,我正在显示一条警告消息。但是当我传递好用户时,我得到的是错误对象res.errors [0]未定义(当然这是真的)。重新制作此代码以兼顾两者的好方法是什么?

这是我的代码:

LoginAPI.getToken(this.state.value)
        .then((res) => {
            if (typeof res.errors[0] !== 'undefined') {
                if (res.errors[0].code === 'auth.credentials') {
                    this.setState({
                        error: 'Username or Password are incorrect!',
                        isLoading: false,
                        token: null
                    });
                    Alert.alert(
                        'Login',
                        this.state.error
                    )
                }
            }
            else {
                this.setState({ token: res });
                LoginAPI.getUser(this.state.token)
                    .then((res) => {
                        Actions.dashboard({userData: res});
                    });
                this.setState({
                    isLoading: false
                });
            }
        }).catch((error) => {
            console.error(error);
        });

感谢您的时间!

1 个答案:

答案 0 :(得分:2)

检查对象或数组中的嵌套值时,应该像这样检查它。

if (res && res.errors && res.errors[0] && res.errors[0].code === 'auth.credentials') {

很可能它正在尝试读取未定义对象属性的属性,而JavaScript 不会 。所以你的逻辑看起来会更像这样。

LoginAPI.getToken(this.state.value)
        .then((res) => {
            if (res && res.errors && res.errors[0] && res.errors[0].code === 'auth.credentials') {
                this.setState({
                    error: 'Username or Password are incorrect!',
                    isLoading: false,
                    token: null
                });
                Alert.alert(
                    'Login',
                    this.state.error
                )
            }
            else {
                this.setState({ token: res });
                LoginAPI.getUser(this.state.token)
                    .then((res) => {
                        Actions.dashboard({userData: res});
                    });
                this.setState({
                    isLoading: false
                });
            }
        }).catch((error) => {
            console.error(error);
        });