收藏
回答

WeUI Uploader 组件属性upload 里的Promise回调传的参数究竟是?

copy https://developers.weixin.qq.com/miniprogram/dev/extended/weui/uploader.html 这里的代码

uplaodFile(files) {
        console.log('upload files', files)
        // 文件上传的函数,返回一个promise
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                reject('some error')
            }, 1000)
        })
    },

改成:

uplaodFile(files) {
        console.log('upload files', files)
        // 文件上传的函数,返回一个promise
        return new Promise((resolve, reject) => {
            setTimeout(() => {
              var object = {};
              object['urls'] = [files.tempFilePaths[0]]
 
              resolve({
                urls: object
              });
            }, 1000)
        })
    },


文档提示的就是这样写,没错啊


然后得到的错误是:


"TypeError: json.urls.forEach is not a function    at http://127.0.0.1:15186/appservice/libs/weui-miniprogram/uploader/uploader.js:237:51"


不知掉那里出错了。痛苦啊

回答关注问题邀请回答
收藏

4 个回答

  • Tommy
    Tommy
    01-04

    改成这样就解决了:

      uplaodFile(files) {
        console.log('upload files:', files)
        // 文件上传的函数,返回一个promise
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            // reject('some error')
            resolve({
              urls: files.tempFilePaths
            });
          }, 1000)
        })
      },
    
    01-04
    赞同
    回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-12-05

    setTimeout只是模拟文件上传的过程,里面自己写


    uplaodFile(files) {

        console.log('upload files', files)

        let ps = [], up = (file)=>{

            return new Promise((resolve, reject) => {

                wx.uploadFile({

                  url: 'https://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址

                  filePath: file,

                  name: 'file',

                  success (res){

                    // 服务器返回的数据 res.data = {url:'图片上传后的地址'}

                    if(res.data.url){

                        resolve(res.data.url)

                    } else{

                        reject(res)

                    }

                  },

                    fail(res){

                        reject(res)

                    }

                })

            })

        }

        files.tempFilePaths.map((v)=>{

            ps.push(up(v))

        })

        return Promise.all(ps).then(res=>{

            return Promise.resolve({urls:res})

        }).catch(res=>{

            return Promise.reject('上传出错')

        })

    }


    2019-12-05
    赞同
    回复 8
    • 龙江
      龙江
      2019-12-05
      是的。我模拟,并且我也给了一个有用的外部地址,就是会出错了,也不知道为什么
      2019-12-05
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-12-05回复龙江
      根据你的错误提示,是你返回的数据格式不对
      2019-12-05
      回复
    • 龙江
      龙江
      2019-12-05
      我去,直接push成数组就不行,我的乖乖
      2019-12-05
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      2019-12-05回复龙江
      还不行?
      2019-12-05
      回复
    • 龙江
      龙江
      2019-12-05
      可以了。用你这个没问提,用我那个就不行
      2019-12-05
      回复
    查看更多(3)
  • 龙江
    龙江
    2019-12-05

    最后改成数组传进去就没有错误提示了,但是同时带来新的错误

    代码:

    uplaodFile(files) {
      var that = this;
      console.log('upload files', files)
      // 文件上传的函数,返回一个promise
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          // reject('some error')
          var object = {};
          object['urls'] = files.tempFilePaths[0]
     
          resolve({
            urls: [object]
          });
        }, 1000)
      })
    },


    错误提示:


    应该是个bug,很大的bug

    2019-12-05
    赞同
    回复 1
    • qncsn
      qncsn
      2019-12-27
      我也遇到了第一个bug,请问楼主解决了嘛
      2019-12-27
      回复
  • 葛葛
    葛葛
    2019-12-05

    uploadFile不管你怎么回调你console出来都是string字符串,你要在最后JSON.parse你的数据

    2019-12-05
    赞同
    回复 1
    • 龙江
      龙江
      2019-12-05
      啥意思?没懂?我是传个对象回去?还是传个字符串回去?
      2019-12-05
      回复
登录 后发表内容
问题标签