2012-04-11 15 views
2

の引数取得:私はこれを持っている非同期親関数

function change(event, file) { 
    console.log("filename", file); 
    //It should be '_file', not 'file'. 
    files.clients(file, function(clientOfFile) { 
    console.log("for client:", clientOfFile); 
    io.sockets.socket(clientOfFile).emit("change"); 
    }); 
} 

client.on("watch", function(file) { 
    _file = base + file; //filename with path 
    files.add(_file, client.id); 
    fs.watch(_file, change); 
}); 

fs.watchはパスなしでファイル名をコールバックに渡されます。だから私は親関数の引数_fileを取得します。私は.callを使うことができると思ったが、コールバックでそれをする方法は? possiblitysの

答えて

3

充実しています、あなたはコールバックの中に、元this valueにアクセスする必要がない場合は1が、Function.prototype.bindを使用することです:

fs.watch(_file, change.bind({_file: _file}); 

あなたは_file

this._file; 

のようにアクセスすることができますこの方法コールバックメソッド内の

注意の


一言:あなたがfiles.clientsのコールバックのコールバックメソッドで別の匿名関数を使用していることに注意してください。 thisは、そこの同じ値を参照しません。したがって、新たに渡されたthis参照にアクセスしたい場合は、別の.bind()コールを呼び出すか、thisへの外部参照をローカル変数に格納する必要があります。

+0

他の可能性について私は興味がありますか? – Hahi

+0

@Hahi:おそらく最も簡単な解決法は、イベントハンドラとして 'change'関数の代わりに無名関数を使うことでしょう。そうすれば、クロージャのために '_file'にアクセスできます。 – jAndy

関連する問題