所以我有一个小的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);
});
感谢您的时间!
答案 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);
});