Node.JS函数返回与调用该函数

时间:2014-06-29 23:06:45

标签: javascript node.js

所以我开始在节点学校学习函数回调/模块,我有点困惑

这是我的代码: 所以我的问题是,我应该返回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);
                }
            )
        }

    });

2 个答案:

答案 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'