2017-02-13 2 views
0
for (var i = 0; i < e.target.files.length; i++) { 
    var storageRef = firebase.storage().ref('user_files/' + e.target.files[i].name).put(e.target.files[i]); 
    storageRef.on('state_changed', null, null, function (snapshot) { 
     var downloadURL = storageRef.snapshot.downloadURL; 

     //i need all the files URL 
     //but always get the last file URL 
    }); 
} 

답변

0

put()으로 전화하면 UploadTask을 반환합니다. 사용하는 on() 메서드 외에 then()도 구현됩니다. 위의 코드의

for (var i = 0; i < e.target.files.length; i++) { 
    var promises = firebase.storage().ref('user_files/' + e.target.files[i].name).put(e.target.files[i]); 
    Promise.all(promises).then(function(results) { 
     var downloadURLs = results.map(function(taskSnapshot) { 
      return taskSnapshot.downloadURL 
     }); 
    }) 
} 

약간 더 현대적인 버전 :

var files = firebase.storage().ref('user_files'); 

var promises = e.target.files.map((f) => files.child(f.name).put(f)); 

Promise.all(promises).then((results) => { 
    var downloadURLs = results.map((taskSnapshot) => taskSnapshot.downloadURL); 
}) 
이것은 당신이 약속로 사용하므로 Promise.all를 사용할 수 있다는 것을 의미