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日

悬赏问题

  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图