收藏
回答

图片同步上传问题?

小程序开发中有一个需求,是希望图片上传后返回的fileid可以被塞入前端的images数组中

我用了promise之后,发现,为什么这个for循环里面,当我的that.data.tempFilePaths.length取2时,i的值竟然可以取到2,而且还调用了2回,这是为什么???

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

2 个回答

  • less
    less
    2021-03-21
    	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();
    			})
    	},
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    	
    
    2021-03-21
    有用
    回复 3
    • M-Y! ! !
      M-Y! ! !
      2021-03-21
      请问一下,为什么要调用两次wx.cloud.uploadfile
      2021-03-21
      回复
    • less
      less
      2021-03-22回复M-Y! ! !
      哈哈哈哈,那时因为我的需求包含<=9张室内图+一张户型图,把第二个wx.cloud.uploadfile删掉
      2021-03-22
      回复
    • less
      less
      2021-03-22回复less
      上传室内图之后 再上传户型图
      2021-03-22
      回复
  • 跨商通
    跨商通
    2021-03-21

    Promise.all

    2021-03-21
    有用
    回复
登录 后发表内容
问题标签