11

Node.JSアプリケーションで少数のディレクトリを監視する必要があります。

function updated(event, filename){
    log("CHANGED\t/share/channels/" + filename);
}
for(i in channels)
    fs.watch('share/channels/' + channels[i], {persistent: false}, updated);

問題は、fs.watchがファイル名をコールバック関数に渡すだけで、そのディレクトリが含まれていないことです。ファイルがどこにあるかを知るために、updated()関数に追加のパラメーターを渡す方法はありますか?

Pythonに似たものを探していると思いますがfunctools.partial、それが役に立ったら。

4

4 に答える 4

14

JS バインドを使用した例

ドキュメント: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

ヒント、バインドされたパラメーターは、呼び出し時のパラメーターの前に発生します。

my_hello = 'Hello!'
my_world = {
    'antartica': 'cold',
}

anonymous_callback = function (injected1, injected2, param1, param2) {
    param1 = param1 ? param1 : 'One';
    param2 = param2 ? param2 : 'Two';

    console.log('param1: (' + typeof(param1) + ') ' + param1)
    console.log('param2: (' + typeof(param2) + ') ' + param2)

    console.log('injected1: (' + typeof(injected1) + ') ' + injected1)
    console.log('injected2: (' + typeof(injected2) + ') ' + injected2)
    console.log(injected2)
}.bind(this, my_hello, my_world)

anonymous_callback('Param 1', 'Param 2')

出力:

param1: (string) Param 1
param2: (string) Param 2
injected1: (string) Hello!
injected2: (object) [object Object]
{ antartica: 'cold' }
于 2015-01-24T00:04:44.947 に答える
13

反復ごとに異なる関数を渡すことができます。

var getUpdatedFunction = function(folderName) {
    return function(event, filename) {
        log("CHANGED\t" + folderName + "/" + filename);
    };
};

for(i in channels) {
    foldername = 'share/channels/' + channels[i];
    fs.watch(foldername, {persistent: false}, getUpdatedFunction(foldername));
}
于 2012-07-07T02:21:58.510 に答える
7

使用できますFunction.bind

function updated(extraInformation, event, filename) {
    log("CHANGED\t/share/channels/" + extraInformation + filename);
}

for(i in channels)
    fs.watch('share/channels/' + channels[i], {persistent: false},
              updated.bind(null, 'wherever/it/is/'));
于 2012-07-07T02:11:25.533 に答える