咱們公司使用的mpvue開發小程序,我在作商品評價這一塊的上傳圖片時遇到一些問題,由於小程序的圖片是單張上傳的,所以我用了for循環將多張圖片循環上傳,我用了兩個數組,一個數組放的是圖片的如今的地址用於顯示在頁面,一個數據放的是上傳圖片至服務器後返回的圖片地址,用於傳遞給後端,可是我發現並非循環一次就執行一遍上傳操做,而是for循環差很少先執行完,纔開始執行上傳操做,這就致使服務器返回的圖片的順序與數組中的順序不同,當我刪除了數組中某個位置的地址,而後再將這張圖片上傳,服務器是根據個人前一個數據的位置返回的,好比刪除了第三張,可是服務器返回的這個第三張的地址多是第二個返回的,而後你在上傳,服務器仍是給你返回第二個,就致使了圖片重複,總而言之就是不能用for循環上傳,那用什麼呢?用遞歸,附上代碼vue
// 上傳圖片 clickChooseImg() { let that = this; const s = 0; wx.chooseImage({ count: 4, sizeType: ["original", "compressed"], sourceType: ["camera",'album'], success: function(res) { let tempFilePaths = res.tempFilePaths; if (tempFilePaths.length != 0) { for (let s = 0; s < tempFilePaths.length; s++) { that.imageList.push(tempFilePaths[s]); }; that.reqUpload(tempFilePaths, s , tempFilePaths.length); } } }) }, // 上傳圖片至七牛 reqUpload(tempFilePaths, s , len) { let that = this wx.uploadFile({ url: "xxxxxxxxxxxxxxxxxxxxxxx", filePath: tempFilePaths[s], name: "file", formData: { token: that.token }, success: function(res) { that.onlineImageList.push(that.addressPrefix + JSON.parse(res.data).key); }, complete: function(){ s++; if(s < len){ that.reqUpload(tempFilePaths,s,len); } } }) },