所以我开始在节点学校学习函数回调/模块,我有点困惑
这是我的代码: 所以我的问题是,我应该返回function_callback还是直接调用它。它似乎给了我相同的结果 例如 return function_callback(err,finalList)
OR
调用function_callback(错误,finalList)
//prints files in a directory given some extension name
module.exports = function(dir_name, ext_type, function_callback)
{
//importing needed modules
var path = require("path");
var fs = require("fs");
var finalList = new Array();
fs.readdir(dir_name, function(err, list)
{
if(err)
{
function_callback(err);
}
else
{
for (var i = 0; i < list.length; i++)
{
if (path.extname(list[i]) == ("." + ext_type))
{
finalList.push(list[i]);
}
}
function_callback(null, finalList);
}
})
};
以上是单个文件(我在主文件中需要)
//main file that imports file_ext_handler
//import modules that we need
var file_ext_handler = require("./file_ext_handler.js");
//declaring vars from process arguments
var dir = process.argv[2];
var ext = process.argv[3]
//reads the directory with is process.arg[2]
file_ext_handler(dir, ext, function(err, list)
{
if (err)
{
throw err;
}
else
{
list.forEach(function (file)
{
console.log(file);
}
)
}
});
答案 0 :(得分:0)
这主要是编码风格的差异。执行早期的显式返回可以保存缩进级别:
function callFoo(cb) {
foo(function(err) {
if (err)
return cb(err);
// do something else
});
}
与
function callFoo(cb) {
foo(function(err) {
if (err)
cb(err);
else {
// do something else
}
});
}
它还可以帮助确保您不会意外地执行之后出现的某些代码。
答案 1 :(得分:0)
正如@mscdex指出的那样,如果满足条件则返回一个函数只会保存一些代码。
if(true) return callback(); // won't go any further if the condition is met
// do something else
与
if(true) {
callback();
} else {
// do something else
}
但是,在其他情况下返回函数可能会带来好处,例如让外部函数返回内部函数返回的值......这听起来令人困惑,所以这是一个人为的例子:
function sayHi() {
return 'Hi';
}
function foo() {
sayHi();
}
foo(); // returns undefined
// Now, let's have foo() return sayHi()
function foo() {
return sayHi(); //
}
foo(); // now returns 'Hi'