React-Native firebase listAll () URL-адреса внутри .then () - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь перенести sh все URL-адреса из .then в массив imageHolder и в конечном итоге вернуть массив из функции, обычно это работает нормально, но не с этим, не знаю почему, кто-нибудь может помочь пожалуйста?

import storage from '@react-native-firebase/storage';

export const fetchProfilePicturesRequest = async () => {
  const reference = await storage()
    .ref(`{currentUser}/images`)
    .listAll();

  var imageHolder = [];

  reference.items.map(values => {
     values.getDownloadURL().then((urlValues) => {
      console.log('Holder now is ', imageHolder);
      imageHolder = imageHolder.concat(urlValues);
    });
  });

  return imageHolder;
};

1 Ответ

0 голосов
/ 28 мая 2020

values.getDownloadURL() - это функция Asyn c, поэтому оператор return будет вызываться до того, как даже values.getDownloadURL() что-то вернет, и поэтому в этом случае массив будет нулевым. Вам нужно поставить ожидание перед values.getDownloadURL() вот так

import storage from '@react-native-firebase/storage';

export const fetchProfilePicturesRequest = async () => {
const reference = await storage()
.ref(`{currentUser}/images`)
.listAll();

var imageHolder = [];

for(let i=0;i<reference.items.length;i++){
   await reference.items[i].getDownloadURL().then((urlValues) => {
      console.log('UrlValue: ', urlValues);
      imageHolder.push(urlValues);
   });
}

console.log('Holder now is ', imageHolder);

return imageHolder;
};

Надеюсь, это решит вашу проблему

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