javascript - 类型错误 : Cannot read property '0' of undefined firebase and vuex

标签 javascript firebase vue.js firebase-realtime-database vuex

我正在使用vuex操作,当我尝试获取上传图像的url时,一切都很好并且图像保存在firebase中,但我无法获取downloadUrl并将其添加到我的downloadurl引用聚会数据库

我的代码如下所示

actions: {
    createMeetup ({commit, getters}, payload) {
      const meetup = {
        title: payload.title,
        location: payload.location,
        description: payload.description,
        date: payload.date.toISOString(),
        creatorId: getters.user.id
      }
      let imageUrl
      let key
      firebase.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 firebase.storage().ref('meetups/' + key + '.' + ext).put(payload.image)
        })
        .then(fileData => {
          console.log(fileData)
          imageUrl = fileData.metadata.downloadURLs[0]
          return firebase.database().ref('meetups').child(key).update({imageUrl: imageUrl})
        })
        .then(() => {
          commit('createMeetup', {
            ...meetup,
            imageUrl: imageUrl,
            id: key
          })
        })
        .catch((error) => {
          console.log(error)
        })
    }

最佳答案

你好,我问我自己回答,我得到了解决方案,谢谢大家不回答

createMeetup ({commit, getters}, payload) {
          const meetup = {
            title: payload.title,
            location: payload.location,
            description: payload.description,
            date: payload.date.toISOString(),
            creatorId: getters.user.id
          }
          let imageUrl
          let key
          firebase.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 firebase.storage().ref('meetups/' + key + '.' + ext).put(payload.image)
            })
            .then(snapshot => {
              return new Promise((resolve, reject) => {
                snapshot.ref.getDownloadURL().then(url => {
                  snapshot.downloadURL = url
                  resolve(snapshot)
                })
              })
            })
            .then((snapshot) => {
              imageUrl = snapshot.downloadURL
              return firebase.database().ref('meetups').child(key).update({imageUrl: imageUrl})
            })
            .then(() => {
              commit('createMeetup', {
                ...meetup,
                imageUrl: imageUrl,
                id: key
              })
            })
            .catch((error) => {
              console.log(error)
            })
        },

关于javascript - 类型错误 : Cannot read property '0' of undefined firebase and vuex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53154717/

相关文章:

javascript - 将 Canvas 绘制成较小的 Canvas 不起作用

java - 是否可以使用 jsp 变量值来初始化 JQUERY 变量?

java - 如何返回 DataSnapshot 值作为方法的结果?

firebase - Firestore 可以扩展吗

javascript - 用于添加 CSS 类的正则表达式

Javascript 函数被调用太多次

javascript - 云HTTPS函数: returning a Promise which is inside a Promisee

javascript - [Vue警告] : Property or method is not defined

Laravel/Inertia 如何全局注册 Link 组件

javascript - 如何监听VueJS组件中的窗口滚动事件?