2012-01-13 21 views
4

htmlページの入力タイプファイルを使用して選択されたファイルを読み込もうとしています。私はファイルを読むための関数を実装しており、ファイルの内容を読み込むことができます。しかし実際の問題は、ファイルの内容の読み込みが非同期的に行われていることです。これは、スクリプトの他の機能を実行できるようにします。私は、ファイルの内容を配列に格納しています。FileReader API:ファイルを同期的に読み取る方法

他の関数に移動している間は、配列は空です。 delayが導入されると、配列に内容があります。誰でも遅延を導入せずにこの問題を解決するのを助けることができますか?

ファイルを読み込むための私のコードは、事前に

var getBinaryDataReader = new FileReader(); 
getBinaryDataReader.onload = (function(theFile) { 
return function(frEvnt) 
{ 
    file[fileCnt]=frEvnt.target.result; 
} 
})(document.forms[formPos].elements[j].files[0]); 

getBinaryDataReader.readAsBinaryString(document.forms[formPos].elements[j].files[0]); 

おかげです。

答えて

5

私は、非同期呼び出し(Ajaxなど)で常に必要なことをする必要があると思います。ファイルを読み込んだときに実行されるコールバックに後で実行する必要があるコードを移動します。

getBinaryDataReader.onload = function(theFile) { 
    // theFile.target.result has your binary 
    // you can move it into the array 
    // (I think you are already doing this properly) 
    // but then ... 
    nowCallTheOtherCodeThatNeedsToRunLater(); 

    // or if you want to wait until all elements 
    // in the array are downloaded now 
    if (myArrayIsFullNow()){ 
     callTheCodeThatNeedsTheFullArray(); 
    } 
    // else: do nothing, the final file to finish downloading 
    // will trigger the code 

} 
+0

コールバックでFileReaderの例を教えてもらえますか – AmGates

関連する問題