在函数内部调用函数,只有在结束后,其余代码才会发生

时间:2018-12-12 13:25:19

标签: javascript reactjs function react-native asynchronous

我只想先调用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) {}
  }

2 个答案:

答案 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;
    }
 }
)