[Необработанное отклонение обещания: TypeError: undefined не является объектом (оценка 'currentUser.uid')] - PullRequest
0 голосов
/ 17 апреля 2020

Я получаю это предупреждение, когда пытаюсь сохранить сведения в базе данных, используя текущего пользователя, вошедшего в систему.

Я следовал интерактивному руководству, но у меня возникла эта проблема, есть ли альтернативный метод для достижения этой цели? Я читал об этой проблеме, но не мог найти решение, я увидел, что это из-за того, что пользователь не вошел в систему, но я вошел в систему

var currentUser
class DecodeScreen extends Component {

  addToBorrow = async (booktitle, bookauthor, bookpublisher, bookisbn) => {

    currentUser = await firebase.auth().currentUser
    var databaseRef = await firebase.database().ref(currentUser.uid).child('BorrowedBooks').push()
    databaseRef.set({
      'title': booktitle,
      'author': bookauthor,
      'publisher': bookpublisher,
      'isbn': bookisbn
  })
  }

  state = {
    data: this.props.navigation.getParam("data", "NO-QR"),
    bookData: '',
    bookFound: false
 }
  _isMounted = false
 bookSearch = () => {
      query = `https://librarydb-19b20.firebaseio.com/books/${9781899606047}.json`,
      axios.get(query)
           .then((response) => {
               const data = response.data ? response.data : false
                   console.log(data)
                   if (this._isMounted){
                    this.setState({ bookData: data, bookFound: true })
                   }   
            })
  }
  renderContent = () => {
    if (this.state.bookFound) {
        return( 
          <View style={styles.container2}>

          <View style={styles.htext}>
          <TextH3>Title :</TextH3>
          <TextH4>{this.state.bookData.title}</TextH4>
          </View>

          <View style={styles.htext}>
          <TextH3>Author :</TextH3>
          <TextH4>{this.state.bookData.author}</TextH4>
          </View>

          <View style={styles.htext}>
          <TextH3>Publisher :</TextH3>
          <TextH4>{this.state.bookData.publisher}</TextH4>
          </View>

          <View style={styles.htext}>
          <TextH3>Isbn :</TextH3>
          <TextH4>{this.state.bookData.isbn}</TextH4>
          </View>

        </View>
        )
      }
      else {
        return(
          <View style={styles.loading}>
          <ActivityIndicator color="blue" size="large" />
        </View>
        )
      } 
 }


  componentDidMount(){
    this._isMounted = true
  }
  componentWillUnmount(){
    this._isMounted = false
  }
  render() {
    {this.bookSearch()}

  return (
    <View style={styles.container}>
        {this.renderContent()}
        <Button title='Borrow' onPress={() => this.addToBorrow(this.state.bookData.title, this.state.bookData.author, this.state.bookData.publisher, this.state.bookData.isbn)} />
    </View>
  );
  }
}

1 Ответ

0 голосов
/ 17 апреля 2020

Во-первых, firebase.auth().currentUser не обещание, и вы не можете await его. Это либо null, либо пользовательский объект .

Во-вторых, заполнение пользовательским объектом при немедленной загрузке страницы не гарантируется. Вам нужно будет использовать наблюдатель состояния авторизации , чтобы узнать, когда пользовательский объект впервые станет доступен после загрузки страницы.

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