2012-04-11 109 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

充足,一種是使用Function.prototype.bind,如果你不需要有回調中訪問原始this value

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

這樣,你可以訪問_file

this._file; 

在你的回調方法中。謹慎的


一個字:要知道,你正在使用其他的匿名函數在爲files.clients回調回調方法。 this在那裏沒有引用相同的值。因此,如果您想訪問我們新近通過的this參考,則需要調用另一個.bind()調用,或者只需將局部變量中的外部參考this存儲起來。

+0

我很好奇什麼是其他可能性? – Hahi 2012-04-11 15:51:13

+0

@Hahi:好的,最簡單的解決方案可能是使用匿名函數,而不是你的'change'函數作爲事件處理函數。這樣你就可以通過關閉來訪問整個'_file'。 – jAndy 2012-04-11 16:04:17