Как использовать ключевое слово await вместе с asyncstorage setitem для ответа сервера? - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь использовать asyncstorage в своем собственном приложении реакции. Проблема в том, что ответ сервера, который я получаю, занимает некоторое время, поэтому я хочу дождаться ответа, затем я хочу использовать этот responseData.user_id для сохранения вмое приложение. Я использую nodejs в качестве backend и mysql db. Поэтому после регистрации пользователя я вставляю его в db, в то же время я написал другой запрос для извлечения их user_id (PK). Так что этот responseData попадает к клиентуи я пытаюсь взять этот user_id из ответа. Итак, я написал что-то вроде этого

   onPressRegister = async () => {

  try {
    let response = await fetch('http://192.168.1.2:3000/users/registration', {
      method: 'POST',
      headers: {
        'Accept': 'applictaion/json',
        'Content-Type': 'application/json',

      },
      body: JSON.stringify({
        contact: this.state.contact,
        password: this.state.password,
      })
    });

    let responseData = await response.json();

    if (responseData) {

      try {
                Action.firstScreen();
        await AsyncStorage.setItem('userid', JSON.stringify(responseData.userData.phone_no));
      }
      catch (e) {
        console.log('caught error', e);
      }

    }
  } catch (error) {
    console.error(error)
  }

}

И на следующем экране я получаю доступ к идентификатору пользователя следующим образом. И передаю его следующему APIзвоните вот так.

         getUserId = async () => {
      let userId = await AsyncStorage.getItem('userid');
      return userId;
    }


onPressYes = (workType) => {
        this.getUserId().then((userId) => {

   this.setState({userId:userId})

})

         fetch('http://192.168.1.2:3000/users/user_request',{
           method:'POST',
           headers:{
             'Accept': 'application/json',
             'Content-Type': 'application/json',
           },
           body:  JSON.stringify({
            workType,
            phone:this.state.userId
             })
         })
         .then(response => response.json())
         .then((responseData) => {
           this.setState({
           data:responseData
         });
         });
     }

Но это ошибка, которую я получаю.error

1 Ответ

0 голосов
/ 25 октября 2018

Попробуйте это:

onPressRegister = async () => {

  try {
    let response = await fetch('http://192.168.1.6:3000/users/registration', {
      method: 'POST',
      headers: {
        'Accept': 'applictaion/json',
        'Content-Type': 'application/json',

      },
      body: JSON.stringify({
        contact: this.state.contact,
        password: this.state.password,
      })
    });

    let responseData = await response.json();

    if (responseData) {

      try {
        await AsyncStorage.setItem('userid', JSON.stringify(responseData.user_id));
      }
      catch (e) {
        console.log('caught error', e);
      }

    }
  } catch (error) {
    console.error(error)
  }

}

Чтобы получить доступ к значению в другом компоненте:

getUserId = async () => {
  let userId = await AsyncStorage.getItem('userid');
  return userId;
}

componentWillMount() {
  this.getUserId().then((userId) => {
    console.log(userId);
  })
}
...