【问题标题】:Vue Firebase cannot not fetch image url after uploading image上传图片后,Vue Firebase 无法获取图片 url
【发布时间】:2021-01-24 15:25:09
【问题描述】:
createMeetup({ commit, getters }, payload) {
  const meetup = {
    title: payload.title,
    location: payload.location,
    desciption: payload.desciption,
    date: payload.date.toISOString(),
    creatorId: getters.user.id
  };
  let imageUrl;
  let key;
  firebaseApp
    .database()
    .ref("meetups")
    .push(meetup)
    .then(data => {
      key = data.key;
      return key;
    })
    .then(key => {
      const filename = payload.image.name;
      const ext = filename.slice(filename.lastIndexOf("."));
      return firebaseApp
        .storage()
        .ref("meetups/" + key + "." + ext)
        .put(payload.image);
    })
    .then(fileData => {
      // TODO: Image ref not found
      imageUrl = fileData.ref.getDownloadURL();
      return firebaseApp
        .database()
        .ref("meetups")
        .child(key)
        .update({ imageUrl: imageUrl });
    })
    .then(() => {
      commit("createMeetup", {
        ...meetup,
        imageUrl: imageUrl,
        id: key
      });
    })
    .catch(err => {
      console.log(err);
    });
},

TODO 部分后报错。我认为它提供了承诺,但无法弄清楚如何处理它。错误是无效的道具:道具“src”的类型检查失败。期望的字符串,对象,得到了 Promise

【问题讨论】:

    标签: javascript firebase vue.js firebase-storage


    【解决方案1】:

    getDownloadURL() 返回一个承诺,而不是一个字符串。需要使用promise异步获取URL,如documentation所示。

    ...
        .then(fileData => {
          return fileData.ref.getDownloadURL();
        })
        .then(imageUrl => {
          return firebaseApp
            .database()
            .ref("meetups")
            .child(key)
            .update({ imageUrl: imageUrl });
        })
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-18
      • 2019-05-31
      • 2023-03-06
      • 2017-12-12
      • 2023-02-08
      • 2017-03-03
      • 2022-09-25
      • 1970-01-01
      相关资源
      最近更新 更多