2016-07-03 30 views
1
var images = []; 
let uploader = new Slingshot.Upload("articles"); 

// file input 
let files = document.getElementById("someId").files; 

for (let i = 0; i < files.length; i++) { 
    uploader.send(files[i], function (error, downloadUrl) { 
     if (!error) { 
      //save all download urls in an array 
      images[i] = downloadUrl; 
     } 
    }); 
} 
console.log(images); 

當我在下載URL後填入上面的圖片數組時,它是空的。 send()塊後任何變量值都會丟失。我想將所有的下載URL存儲在一個數組中,那麼我該怎麼做?帶邊緣的多個文件上傳網址:彈弓

+0

''在''uploader.send()''處關閉')',在'for'循環處關閉'}'? 'uploader.send()'異步返回結果嗎? – guest271314

+0

是的,我忘了輸入。它以異步方式發送文件,並在每個實例化中處理一個文件。正如在上面的代碼中,我想存儲一個url數組,但這不讓我這樣做。 – Buyantogtokh

+0

'console.log(images)'可以在異步回調完成之前調用。在調用console.log(images)之前,你可以檢查'i'是否等於'files.length';例如,在回調中,'if(i === files.length){console.log(images)}' – guest271314

回答

0

Slingshot的uploader.send()是一個異步過程。

因此,它在我看來,它只是一個classic async task misunderstanding

I.e. console.log(images)之前呼叫uploader.send回調被執行。

此外,您將通過在回調函數中使用您的i變量來遇到範圍問題。當它執行時,i將具有不同的值。通常它已經等於files.length。這意味着所有回調將寫入相同的陣列項目images[files.length]