Вызов функции внутри функции и только после ее завершения произойдет остаток кода - PullRequest
0 голосов
/ 12 декабря 2018

Сначала я хочу вызвать функцию 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 голосов
/ 12 декабря 2018

Вы можете использовать .then, потому что используете асинхронную функцию.GetUsers является асинхронным, поэтому возвращает обещание.Например:

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;
    }
 }
)
0 голосов
/ 12 декабря 2018

Вам необходимо сделать вашу addComment функцию асинхронной, если ваш getUser() является асинхронным, что и происходит, учитывая, что он делает setState().Затем вам нужно await getUser() перед выполнением остальной части кода.

addComment = async () => {
    await getUser();
    //... rest of the code

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...