1 Làm thế nào để chờ firebase, tìm nạp dữ liệu và trả về mảng trong phương thức?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Vì vậy, tôi có phương thức này trong thành phần chứa:

getProfilesOptions = () => {

    const result = firebase.firestore().collection('roles').get().then(snapshot => {
      const options = []

      snapshot.docs.forEach(doc => {
        options.push({ value: doc.id, label: doc.data().profile })
        //console.log(doc.id) - everything ok, i'm fetching data correctyly
      });
      return options
    })
    console.log(result)//here i have pending result in debugger
    return result
  }

sau đó, tôi đang chuyển liên kết vào thành phần con ... con ...

Sau đó, tôi có một số đứa trẻ tôi muốn gọi nó và lấy mảng là kết quả và sau đó đặt trạng thái:

componentDidUpdate() {
    if(this.state.isFocused && !this.state.options){

      const options = this.props.getOptions()

      this.setState({
        options: options
      })
    }
  }

Tôi có thể có giải pháp cho vấn đề này không? Tất nhiên tôi có thể chuyển các đạo cụ như kết quả thay vì các đạo cụ tham chiếu đến phương thức, nhưng tôi có thể sử dụng phương thức này không? Làm cách nào để cải thiện getProfilesOptions?

    
0
1 Câu trả lời                              1                         

Bạn nên bọc cuộc gọi căn cứ hỏa lực của mình trong Lời hứa, vì đây là cuộc gọi không đồng bộ.

getProfilesOptions = () => {
   return new Promise(resolve => {
      firebase.firestore().collection('roles').get().then(snapshot => {
        const options = []

        snapshot.docs.forEach(doc => {
          options.push({ value: doc.id, label: doc.data().profile })
          //console.log(doc.id) - everything ok, i'm fetching data correctyly
        });
        resolve(options)
      })                                                          
   }  
}

Và nhận kết quả trong thành phần của bạn với .then ()

componentDidUpdate() {
  if(this.state.isFocused && !this.state.options){

    this.props.getOptions().then(options => {
      this.setState({
        options: options
      })
    })

  }
}

Bạn có thể đọc thêm về Lời hứa của Javascript tại đây

    
3
2019-05-08 17: 31: 06Z
  1. Cảm ơn! tôi sẽ đọc nó thx cho câu trả lời của bạn! Nó giúp!
    2019-05-08 17: 46: 56Z
nguồn đặt đây