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 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line