2017-10-04 5 views
0

idsのリストがfirebaseストレージに送られ、各idのダウンロードURLを取得し、URLを配列と同じ順序で保存する関数を記述しようとしていますids配列。テストでは、ダウンロードURLがランダムな順序で返されることがわかりました。以下は、前述の関数の縮小されたコードです。
1)返されたURLが正しい順序で到着させる方法はありますか?
2)ループの後にsetTimeout関数を使用して3秒間待機しないと、urlsToDownload配列が空になります。すべてのURLがダウンロードされるまで待つより正確な方法はありますか?あなたは何ができるかFirebaseがgetDownloadURLをループで呼び出すと、ランダムな順番で戻ります

function downloadAll() { 
     var storageRef = firebase.storage().ref("/stuffToDownload"); 
     var urlsToDownload = []; 
     var downloadIds = ['1', '2']; 
     for (var x = 0; x < downloadIds.length; x++) { 
      var downloadId = dowloadIds[x]; 
      (function(did) { 
       var storageFileRef = storageRef.child(did); 
       storageFileRef.getDownloadURL().then(function(url) { 
       urlsToDownload.push(url); 
       }).catch(function(error) { 
       console.log("error"); 
       }); 
      })(downloadId); 
      } 
     } 
     } 
     setTimeout(function() { 
     console.log("finished getting file urls", urlsToDownload.length); 
     var index = 0; 
     for(index = 0; index < urlsToDownload.length; index++){ 
      console.log(index + " " + urlsToDownload[index]); 
     } 
     }, 3000); 
    } 
+2

です。 getDownloadURL() 'は非同期です。あなたの 'for'ループは、これらすべての要求を一度に起動します。応答を待つ必要があり、前の応答が到着したときにのみ次の要求を送信する必要があります。 https://stackoverflow.com/questions/4288759/asynchronous-for-cycle-in-javascript –

+1

ありがとう、私はあなたの応答で他の投稿への参照を使用して、私のために働いた –

+0

聞いてうれしい –

答えて

0

は、URLが続いダウンロードマッチは以下のような関数を呼び出す場合、downloadIdsの長さとurlsToDownloadの長さをチェックするのを待つstorageFileRef `ためだ

storageFileRef.getDownloadURL().then(function(url) { 
      urlsToDownload.push(url); 
      if(urlsToDownload.length==downloadIds.length){ //if you have all the files matching with downloadIds then you will get all the download URL 
      _callConsoleLog() 
      } 
      }) 
var _callConsoleLog=function(){ 
    var index = 0; 
    for(index = 0; index < urlsToDownload.length; index++){ 
     console.log(index + " " + urlsToDownload[index]); 
    } 
} 
+0

これはしかし、setTimeoutを削除することができる最適なソリューションですが、urlsToDownloadの値の順序がまだランダムであることを理解する限り、 –

+0

ランダムな意味はどうですか?あなたは出力を表示することができますので、私はあなたを助けることができます – MuruGan

関連する問題