Поместить все данные в массив из хранилища Firebase в асинхронной функции React Native - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь получить все изображения в хранилище Firebase. Пока это работает. Но проблема в том, как поместить ВСЕ данные внутри массива в асинхронную функцию, а не только в одну, а затем передать ее в состояние?

Мой код:

   async componentDidMount(){
        auth().signInAnonymously();

        var arr = [];
        var storageRef = storage().ref("/madu_mubarak/");
        await storageRef.listAll().then((result)=> {
            result.items.forEach((imageItem) =>{
              this.displayItem(imageItem)
            });
          }).catch(function(error) {
            console.warn("error "+error);
          });


    }

    async displayItem(imageItem){
        var arr = [];
        imageItem.getDownloadURL().
            then((url) => {
          console.warn("ur "+url)
          arr.push(url);
          this.setState({
            isLoad: false,
            urlImage: arr
          })
        }).catch((error) =>{
          console.warn("error "+error);
        });


        // return await Promise.all(arr);
    }

Пожалуйста, помогите. Спасибо

1 Ответ

1 голос
/ 28 апреля 2020

Основная суть состоит в следующем:


async componentDidMount(){
        auth().signInAnonymously();


        var storageRef = storage().ref("/madu_mubarak/");
        await storageRef.listAll().then((result)=> {
           let promises = result.items.map((imageItem) =>{
              return imageItem.getDownloadURL()
            });
            Promise.all(promises).then(urls => this.setState({images: urls})

    }

Вы хотите создать массив обещаний, возвращаемых из getDownloadUrl, и ждать, пока все они разрешатся с помощью Primise.all, а затем вы можете присвоить результат состояние

...