我只想先调用getUser()函数(首先检查是否有用户登录),然后再调用其余的函数代码。
我有一些这样的函数,需要登录用户才能发生,而不是复制代码,我想每次都调用getUser()函数。
我需要的功能顺序及其说明:
addComment = () => {
this.getUser() // check if user is logged with getItem and setState userOnline boolean
/// only after the getUser is done will continue with this code -
if (this.state.userOnline == true)
{
/// fetch and other function code
this.setState({userOnline : false});
}
else {
Alert.alert("You have to be logged-in to publish comments");
return;
}
}
getUser函数-
async getUser() {
try {
const user = await AsyncStorage.getItem("@Ye-Music:user");
if (user !== null) {
this.setState({ userData: JSON.parse(user) });
this.setState({ userOnline: true})
}
} catch (error) {}
}
答案 0 :(得分:3)
如果您的addComment
是异步的,则需要使getUser()
函数异步,考虑到它正在setState()
进行同步。然后,您需要先await getUser()
,然后再执行其余代码。
addComment = async () => {
await getUser();
//... rest of the code
}
答案 1 :(得分:0)
您可以使用.then,因为您正在使用异步功能。 GetUsers是异步的,因此它返回一个Promise。例如:
async function f() {
return 1;
}
f().then(alert);
所以尝试一下:
this.getUser().then(
if (this.state.userOnline == true)
{
/// fetch and other function code
this.setState({userOnline : false});
}
else {
Alert.alert("You have to be logged-in to publish comments");
return;
}
}
)