【问题标题】:Await New Promise Not Working When Getting Url Photo From Firebase Storage从 Firebase 存储中获取 URL 照片时,等待新的 Promise 不起作用
【发布时间】:2021-09-15 02:00:46
【问题描述】:

我想从 firebase 存储中获取数据联系人,然后从 firestore 存储中获取联系人照片。

get_contact  = async () => {
let contacts = [];
let campaignsRef = await firestore().collection('users').doc(global.iduser).collection("contacts").get();
for (let campaign of campaignsRef.docs) {
    let tasksRef = firestore().collection('users').doc(campaign.data().uid).get();
    await tasksRef
    .then(DocumentSnapshot => {
      let data = DocumentSnapshot.data();
      let photo =  new Promise((resolve, reject) => {
        storage()
        .refFromURL('gs://think-ce51b.appspot.com/profiledefault.jpg')
        .getDownloadURL()
        .then(url => {
          resolve(url);
        })
        .catch(error => {
          return reject(error);
        });
      });    
      console.log(photo);
      contacts.push({
        'key': data.uid,
        'fullname': data.fullname,
        'profilephoto': photo,
      });
    })
    .catch(error => {
      setInitializing(false);
    });
}
setdataContacts(contacts);
setInitializing(false);}

我可以从 DocumenSnapshot 获取数据联系人。但是当我想从 firebase 存储中获取 url 时,照片返回 null/{"_U": 0, "_V": 0, "_W": null, "_X": null}。我认为可变照片中的新承诺无法正常运行。

如何在照片获取网址后才推送给联系人?

【问题讨论】:

    标签: javascript google-cloud-firestore async-await firebase-storage


    【解决方案1】:

    您的代码存在很多问题。我很快发现的那些:

    1. getDownloadURL 方法已经返回了一个 promise,因此您无需创建自己的。
    2. 您不应在代码中混用 awaitthen。除非您非常清楚自己在做什么,否则最好坚持其中一个。

    如果我们在您的代码中解决这两个问题,我们最终会得到:

    get_contact  = async () => {
      let contacts = [];
      let campaignsRef = await firestore().collection('users').doc(global.iduser).collection("contacts").get();
      for (let campaign of campaignsRef.docs) {
        let tasksDoc = await firestore().collection('users').doc(campaign.data().uid).get();
        let data = tasksDoc.data();
        let url = await storage()
            .refFromURL('gs://think-ce51b.appspot.com/profiledefault.jpg')
            .getDownloadURL()
        contacts.push({
          'key': data.uid,
          'fullname': data.fullname,
          'profilephoto': photo,
        });
      }
      setdataContacts(contacts);
      setInitializing(false);
    }
    

    代码可能存在更多问题,但这是一个很好的起点。

    【讨论】:

      猜你喜欢
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多