我使用以下代码,代码没有进入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的返回值正确。
我看到这篇文章,但我认为我做了同样的事情,我在这里想念一下吗? How do I return the response from an asynchronous call?
在这种情况下,建议使用承诺??? ,如蓝鸟
答案 0 :(得分:0)
问题在于return
回调中的fs.readfile
值不是其包含函数getContent
的有效返回值。
当您将回调传递给fs.readFile
时,您传入的功能排队以在 fs.readFile
完成时运行。简单来说,getContent
进行排队,然后说'#34;我的工作已经完成了!"并返回(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);
}
});
现在,getContent
将在function (error, data)
完成后运行其第二个参数fs.readFile
。