如果我有以下代码:
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
发布于 2013-07-09 23:53:10
你不能从回调中有效地return
你的代码。
在回调中使用return
的
fs.readFile()
会调用回调函数本身,因此会将return
值提供给它。为了让您的代码接收它,fs.readFile()
必须return
它从回调中获得的值,但它没有。fs.readFile()
是异步的,所以它实际上不能。1. "Present"
变量内容;var f= fs.readFile('./index.html',/* ... */);f();
2.“未来”
/* ... */函数read(err,data) { if (err) {抛出错误;} content = data;return console.log(content);} /* ... */
您不能在“现在”中使用来自“未来”的值--或者,在这一点上,使用“过去”。
这通常会导致继续使用callback
模式,而不是使用return
。带上你的"" 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);
});
发布于 2013-07-09 23:14:13
您可以为自定义事件分配事件处理程序,并从回调中触发(发出)事件。开始的时候有点难以理解,但是很优雅。
有关示例,请参阅Emitting event in Node.js。
https://stackoverflow.com/questions/17559698
复制相似问题