0

我试图了解何时将响应之类的东西注入函数,而不是调用函数并从中返回一些东西。在 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;

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

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

谢谢。

4

1 回答 1

1

如果您的函数:您必须使用回调而不是返回值:

  • 执行任何异步 I/O(文件系统、网络、子进程等)
  • 使用 process.nextTick
  • 使用 setTimeout
  • 使用 setInterval

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

如果您所做的只是常规的内存中 javascript 计算,则可以只返回一个值。

而如果你想同时有返回值和做IO,你可以返回一个promise。

于 2013-10-22T05:42:06.683 回答