问题描述
我使用以下代码,但代码未到达if语句
function getContent(key) {
var filePath = path.join(__dirname, '../test.txt');
fs.readFile(filePath, 'utf8', function (err, data) {
if (err) {
return console.log(err);
}
....
var fileKeyValObj = {};
return fileKeyValObj[key];
});
}
我能够通过调试及其工作正常访问上一方法的返回... 在这里,该功能没有达到if
getContent('web', function (cmd) {
if (typeof cmd !== 'undefined') {
这里的关键是我发送的网站,我看到getContent的返回值正确。
我看到了这篇文章,但我认为我也做了同样的事情,我在这里错过了吗?
顺便说一句,在这种情况下,建议使用promise ??? 像蓝鸟
1楼
heartyporridge
0
2015-07-30 18:27:01
问题是fs.readfile
的回调中的return
值不是其包含函数getContent
的有效返回值。
当您将回调传递给fs.readFile
,传递的函数将在fs.readFile
完成时 排队运行。
简而言之, getContent
进行排队,然后说“我的工作完成了!”
并返回(void),但是fs.readfile
在运行回调之前正在等待其自身完成。
当fs.readfile
运行其回调时,它不在 getContent
的上下文中。
它会返回,但是“没人在那儿”获取返回值。
相反,您可以做的是将回调传递给getContent
,然后将其传递给fs.readFile
。
function getContent(key, callback) {
var filePath = path.join(__dirname, '../test.txt');
fs.readFile(filePath, 'utf8', callback);
}
getContent('web', function (error, data) {
if (!error) {
... //Put your code here!
} else {
console.log(error);
}
});
现在,当fs.readFile
完成时, getContent
将运行其第二个参数function (error, data)
。