weixin_43356655 2022-07-05 23:23 采纳率: 83.3%
浏览 33
已结题

小程序upload异步问题

小程序想通过上传图片后将图片位置存储在云函数的字段里,但返回的结果是个[]空的值,无法保存在云函数字段里,可能是异步问题

运行结果及报错内容

    async chooseImg(e) {
        await this.chooseImg2(e)

        await wx.cloud.callFunction({
            name: "deliver_table",
            data: {
                id: this.data.dataList[e.currentTarget.dataset.index]._id,
                deliver_place: this.data.dataList[e.currentTarget.dataset.index].deliver_place
            },
        })
    },
    async chooseImg2(e) {
        let that = this
        var val = e.detail.value;
        let index = e.currentTarget.dataset.index
        console.log(index)
        wx.chooseImage({
            count: 2,
            sizeType: ['compressed'],
            sourceType: ['album', 'camera'],
            success(res) {
                // tempFilePath可以作为 img 标签的 src 属性显示图片
                const tempFilePaths = res.tempFilePaths
                console.log(tempFilePaths)
                for (let i = 0; i < tempFilePaths.length; i++) {
                    wx.cloud.uploadFile({
                        cloudPath: "deliver_place/" + Date.now() + ".jpg",
                        filePath: tempFilePaths[i]
                    }).then(res => {
                        console.log(res)
                        let deliver_place = 'dataList[' + index + '].deliver_place[' + i + ']'
                        that.setData({
                            [deliver_place]: res.fileID
                        })
                        console.log(that.data.dataList)
                    })
                }
            }
        })
    },


  • 写回答

1条回答 默认 最新

  • ZionHH 2022-07-06 10:23
    关注

    写个demo

    <button bindtap="chooseImage">选择图片</button>
    
    // pages/demo/demo.js
    Page({
      data: {
        fileArr: []
      },
    
      // 选择图片
      chooseImage() {
        wx.chooseImage({
          count: 2,
          success: async res => {
            const { tempFilePaths } = res
            let { fileArr } = this.data
            for (const item of tempFilePaths) {
              // 同步等待
              const result = await this.uploadImage(item)
              fileArr.push(result)
            }
            console.log(fileArr);
          }
        })
      },
      // 上传图片
      uploadImage(filePath) {
        // 模拟异步
        return new Promise((reslove, reject) => {
          setTimeout(() => {
            filePath = `temp_${filePath}`
            reslove(filePath)
          }, 1000)
        })
      }
    })
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月15日
  • 已采纳回答 7月7日
  • 创建了问题 7月5日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来