簡體   English   中英

如何解決for循環內的狀態更改?

[英]How to resolve the state change inside a for loop?

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
    });
}

當您調用put() ,返回一個UploadTask 除了使用on()方法之外,該方法還實現then() 這意味着您可以將其用作承諾,然后使用Promise.all

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);
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM