我有一个关于回调函数的问题。考虑这个简单的代码:
var array = [1,2,3];
console.log(array.map(function(val){
return val * 2
}))
这将正确地登录回控制台[2,4,6]
,这意味着它正在“返回”该值。
现在考虑这个(注意:假设“ab”是一个有效的目录)
fs.readdir("ab",function(err,data){
console.log(data)
})
这段代码工作正常,并将把目录“ab”中的文件名数组打印到终端。但是,相同的代码:
console.log(fs.readdir("ab",function(err,data){
return data
}))
这将打印未定义
..这是为什么?如果在前面的代码片段中我可以将数据记录到终端,为什么我不能返回该值并将其记录到控制台?包含 map
方法的第一个片段如何使用相同的逻辑工作?
谢谢。
最佳答案
fs
是一个异步函数
,它不返回值,因为它不知道该值何时可用,因此它会记录未定义
。
当您说console.log(fs.readdir())
时,它会读取fs
函数并检查它是否返回任何在本例中为未定义
的内容,然后将其记录下来。执行尚未进入 fs.readdir() 的回调内部,因为它是异步的,需要时间才能完成。
fs.readdir()
就像一个 promise ,它调用读取目录并忘记它,直到读取操作完成,然后调用它的回调函数。
因此,我们传递回调函数,当异步操作完成执行时,这些函数将被回调,如下所示:
function readFile (callback){
fs.readdir("ab",function(err,data){
return callback(data);
});
}
readFile(function (data){
console.log(data);
});
关于node.js - Node.js 中回调函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41646445/