将附加参数传递给Javascript回调函数
我需要查看Node.JS应用程序中的少量目录:将附加参数传递给Javascript回调函数,javascript,node.js,callback,Javascript,Node.js,Callback,我需要查看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只将文件名传递给回调函数,而不包括它所在的目录。是否有一种方法可
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
,如果有帮助的话。您可以使用:
您可以为每个迭代传递不同的函数:
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));
}
使用jsbind的示例
文件:
提示:绑定参数出现在调用时间参数之前
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' }
您可以在适当的位置传递额外的回调
function updated(channel, filename) {
log('CHANGED\t ' + channel + '/' + filename);
}
for(i in channels) {
channel = '/share/channels/' + channels[i];
fs.watch(channel, {persistent: false}, function (extra, event, filename) {
updated(channel, filename);
});
}
我一点也不以你为榜样。您是否明确引用了添加到函数中的额外参数?@ThorCaller:
updated.bind(null,“where/it/is/”)
返回一个可以接受两个参数的函数,在'where/it/is/
前面加上前缀,然后将其传递给updated
(其中null
是此的未使用值)谢谢你,我已经为这个问题争论了几个小时了,你的解释非常清楚,我终于成功了。
function updated(channel, filename) {
log('CHANGED\t ' + channel + '/' + filename);
}
for(i in channels) {
channel = '/share/channels/' + channels[i];
fs.watch(channel, {persistent: false}, function (extra, event, filename) {
updated(channel, filename);
});
}