2016-10-05 10 views
0

でファイルを読み込む扱う、私は「ミニWebフレームワーク」javascriptのコールバック - プロジェクトのためにfs.readFile

を作成するために、ネットモジュールを使用しています、私はこの1つのコールバック

を扱う多くの問題を抱えていますこれまでのところ、このコードは、私はエラーをキャッチしても適切にデータを書き込むことができるという意味で働く

var handleRead = function(contentType, data, err) { 
    if (err) { 
    console.log(err);   //returns properly 
    } else { 
    console.log(data);  //returns properly 
    console.log(contentType) //returning undefined 
} 

:readFileのは次のように定義されて

var sendFile(path) { 
    fs.readFile(path, config, this.handleRead.bind(this)); 
} 

私の質問は、どのようにしてコールバックを通じてcontentTypeを送信するのですか?

私が試してみた -

var sendFile(path) { 
    var contentType = ContentType['the path type'] 
    fs.readFile(path, config, this.handleRead(contentType).bind(this)); 
} 

をしかし、これは、データを引き起こし、未定義することが誤ります。

私はかなりjsですが、コールバックを扱う方法についてはまだ混乱しています。すべての入力をいただければ幸いです!

+0

だから、 'readFile'とは何ですか?あなたは 'handleRead'を見せてくれましたが、どのように呼び出されたのかはわかりません。 –

+0

こんにちは@RocketHazmat readFileは、私がインポートしたモジュールfsのメソッドです。 handleReadは第3引数としてreadFileの中で呼び出されます: 'fs.readFile(path、config、this.handleRead.bind(this));' –

+0

これは 'readFile'メソッドにコールバックを渡すだけです。それはどのように/それが呼び出されたかを示していません。 'this.handleRead.bind(this)'はある時点で実行/呼び出す必要がある関数です。 –

答えて

1

.bind() "コンテキスト"(this関数の値)を設定するだけではありません。関数内の引数を "バインド"することもできます。

試してみてください。

function sendFile(path) { 
    var contentType = ContentType['the path type'] 
    fs.readFile(path, config, this.handleRead.bind(this, contentType)); 
} 

これは何thisに設定し、そのコンテキストでコールバックを渡しますであり、その第一パラメータがcontentTypeに設定します。このコールバックがdata(おそらくerr)で呼び出される限り、すべてが機能します。

関連する問題