如果我有以下代码:
var content;
var f = fs.readFile('./index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
return console.log(content);
});
f();
我得到了以下内容:
f();
^
TypeError: undefined is not a function
如何返回未定义的函数?
我真正的问题,在更大的背景下是以下https://gist.github.com/jrm2k6/5962230
答案 0 :(得分:3)
您无法在回调代码中有用 return
。
在回调中使用return
不会为您的代码返回值。 fs.readFile()
调用回调本身,因此return
值被赋予它。要让您的代码接收它,fs.readFile()
必须return
从回调获得的值,而不是。{/ p>
而且,由于fs.readFile()
是异步的,它实际上不能。您的代码跨越了两个不同的时间点:
“存在”
var content;
var f = fs.readFile('./index.html', /* ... */);
f();
“未来”
/* ... */
function read(err, data) {
if (err) {
throw err;
}
content = data;
return console.log(content);
}
/* ... */
您根本无法使用“当前”中的“ Future ”中的值 - 或者,此时,“过去< / EM>“。
这通常会导致继续使用callback
模式,而不是使用return
。带上你的"real" code:
var cheerioURLContent = function (url, callback) {
rest.get(url).on("complete", function (result) {
callback(cheerio.load(result));
});
};
cheerioURLContent('./index.html', function (t) {
console.log(t);
});
答案 1 :(得分:1)
您可以为自定义事件分配事件处理程序,并从回调中触发(发出)事件。一开始有点难以理解,但非常优雅。
有关示例,请参阅Emitting event in Node.js。