小程序
小游戏
企业微信
微信支付
扫描小程序码分享
小程序开发中有一个需求,是希望图片上传后返回的fileid可以被塞入前端的images数组中
我用了promise之后,发现,为什么这个for循环里面,当我的that.data.tempFilePaths.length取2时,i的值竟然可以取到2,而且还调用了2回,这是为什么???
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
OnUpImg: function () { let promiseArr = [] let fileIds = [] // 将图片的fileId存放到一个数组中 let imgLength = this.data.imgOne.length; // 图片上传 for (let i = 0; i < imgLength; i++) { let p = new Promise((resolve, reject) => { let item = this.data.imgOne[i] // 文件扩展名 let suffix = /\.\w+$/.exec(item)[0]; // 取文件后拓展名 wx.cloud.uploadFile({ // 利用官方提供的上传接口 cloudPath: 'fangjian/' + Date.now() + '-' + Math.random() * 1000000 + suffix, // 云存储路径 filePath: item, // 要上传文件资源的路径 success: (res) => { console.log(res); // console.log(res.fileID) fileIds = fileIds.concat(res.fileID) // 将新上传的与之前上传的给拼接起来 resolve() }, fail: (err) => { console.error(err) reject() } }) }) promiseArr.push(p) } // 存入到云数据库,其中这个Promise.all(),等待里面所有的任务都执行之后,在去执行后面的任务,也就是等待上传所有的图片上传完后,才能把相对应的数据存到数据库当中,具体与promise相关问题,可自行查漏 Promise.all(promiseArr).then((res) => { let item = this.data.imgOne[0] let suffix = /\.\w+$/.exec(item)[0] wx.cloud.uploadFile({ // 利用官方提供的上传接口 cloudPath: 'huxingtu/' + Date.now() + '-' + Math.random() * 1000000 + suffix, // 云存储路径 filePath: item, // 要上传文件资源的路径 success: res => { console.log(res.fileID) this.addtoDB(fileIds, res.fileID); }, fail: console.error }) }) .catch((err) => { // 发布失败console.error(err); // wx.showToast({ // title: '上传失败 正在重试', // icon: 'none', // mask: true, // duration: 10000 // }) // this.OnUpImg(); }) },
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
Promise.all
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
OnUpImg: function () { let promiseArr = [] let fileIds = [] // 将图片的fileId存放到一个数组中 let imgLength = this.data.imgOne.length; // 图片上传 for (let i = 0; i < imgLength; i++) { let p = new Promise((resolve, reject) => { let item = this.data.imgOne[i] // 文件扩展名 let suffix = /\.\w+$/.exec(item)[0]; // 取文件后拓展名 wx.cloud.uploadFile({ // 利用官方提供的上传接口 cloudPath: 'fangjian/' + Date.now() + '-' + Math.random() * 1000000 + suffix, // 云存储路径 filePath: item, // 要上传文件资源的路径 success: (res) => { console.log(res); // console.log(res.fileID) fileIds = fileIds.concat(res.fileID) // 将新上传的与之前上传的给拼接起来 resolve() }, fail: (err) => { console.error(err) reject() } }) }) promiseArr.push(p) } // 存入到云数据库,其中这个Promise.all(),等待里面所有的任务都执行之后,在去执行后面的任务,也就是等待上传所有的图片上传完后,才能把相对应的数据存到数据库当中,具体与promise相关问题,可自行查漏 Promise.all(promiseArr).then((res) => { let item = this.data.imgOne[0] let suffix = /\.\w+$/.exec(item)[0] wx.cloud.uploadFile({ // 利用官方提供的上传接口 cloudPath: 'huxingtu/' + Date.now() + '-' + Math.random() * 1000000 + suffix, // 云存储路径 filePath: item, // 要上传文件资源的路径 success: res => { console.log(res.fileID) this.addtoDB(fileIds, res.fileID); }, fail: console.error }) }) .catch((err) => { // 发布失败console.error(err); // wx.showToast({ // title: '上传失败 正在重试', // icon: 'none', // mask: true, // duration: 10000 // }) // this.OnUpImg(); }) },
Promise.all