代码之家  ›  专栏  ›  技术社区  ›  Ed Raouf

React Native firebase列出.then()中的所有URL

  •  0
  • Ed Raouf  · 技术社区  · 4 年前

    我试图从内部推送所有网址 .then 进入 imageHolder array并最终返回函数中的数组,通常它工作得很好,但不确定为什么,有人能帮忙吗?

    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;
    };
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Awais Rana    4 年前

    values.getDownloadURL() 是Async函数,所以return语句会在甚至之前被调用 values.getDownloadURL() 返回某物,因此在这种情况下数组将为null。你需要在等待之前 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;
    };
    

    希望这能解决你的问题