注入参数与返回node.js中的数据

时间:2013-10-22 04:06:43

标签: javascript node.js

我试图理解何时向函数注入类似响应的东西,而不是调用函数并从中返回一些东西。在Node.js中。

Node.js中的任何函数都返回数据吗?或者是关于注入参数和使用回调的全部内容?

var sendHTMLToBrowser = require("../myCode/andrewsHelpers").sendHTMLToBrowser;
//var execExternalCommand = require("./childProcesses").execExternalCommand;
// import the exec function defined on the child_process module
var exec = require('child_process').exec;

function start(response, request) {
    console.log("Request handler 'start' was called");

    var body = '<!doctype html>'+
        '<html lang="en">'+
        '<head>'+
        '<meta charset=UTF-8" />'+
        '</head>'+
        '<body>'+
        '<p>Hello Andrew :)</p>'+
        '</body>'+
        '</html>';

    sendHTMLToBrowser(response, body);
}

function linecount(response, request) {
    console.log("Request handler 'linecount' was called.");

    // launch the command "cat *.js | wc -l"
    exec('cat *.js | wc -l', function(err, stdout, stderr) {
        // the command exited or the launching failed
        if (err) {
            // we had an error launching the process
            console.log('child process exited with error code', err.code);
            return;
        }
        sendHTMLToBrowser(response, stdout.toString());
    });
}

function executeCommand(command) {

    return result;
}

exports.start = start;
exports.linecount = linecount;

所以我在一些代码中硬编码以在浏览器中显示linecount。如果我想创建一个更通用的函数,将命令作为字符串并返回输出,该怎么办?我会再次向此函数注入响应,还是可以返回结果?

关于命令是否可能成为块的问题?例如做一些基本的字符串操作可能会实现为一个返回值的函数?

感谢。

1 个答案:

答案 0 :(得分:1)

如果您的函数是

,则必须使用回调而不是返回值
  • 执行任何异步I / O(文件系统,网络,子进程等)
  • 使用process.nextTick
  • 使用setTimeout
  • 使用setInterval

任何这些事情都会导致你的函数跨越多个事件循环“tick”,因此需要回调。

如果你所做的只是常规的内存中javascript计算,你只需返回一个值。

如果你想同时拥有一个返回值并执行IO,你可以返回一个承诺。