阻止Node.js重新打印输出

时间:2012-12-03 12:46:38

标签: javascript node.js read-eval-print-loop

如果某些javascript计算的结果是10,000个元素的数组,则Node.js repl将其打印出来。我该如何阻止它这样做?

由于

6 个答案:

答案 0 :(得分:21)

为什么不将; null;追加到您的表达中?

new Array(10000); null;

打印

null

甚至更短,请使用;0;

答案 1 :(得分:7)

将结果分配给使用var声明的变量。 var语句始终返回undefined

> new Array(10)
[ , , , , , , , , ,  ]

> var a = new Array(10)
undefined

答案 2 :(得分:6)

Node使用inspect来格式化返回值。用只返回空字符串的函数替换inspect,它不会显示任何内容。

require('util').inspect = function () { return '' };

答案 3 :(得分:3)

您可以自己启动REPL并更改任何令您烦恼的事情。例如,当表达式没有结果时,您可以告诉它不要打印undefined。或者你可以包装表达式的评估并阻止它们返回结果。如果您同时执行这两项操作,则可以有效地将REPL减少为REL:

node -e '
    const vm = require("vm");
    require("repl").start({
        ignoreUndefined: true,
        eval: function(cmd, ctx, fn, cb) {
            let err = null;
            try {
                vm.runInContext(cmd, ctx, fn);
            } catch (e) {
                err = e;
            }
            cb(err);
        }
    });
'

答案 4 :(得分:0)

我已经在对此问题的评论中说过,您可能希望将命令的执行包装在匿名函数中。假设您有一些重复的过程会返回某种结果。像这样:

var some_array = [1, 2, 3];

some_array.map(function(){

    // It doesn't matter what you return here, even if it's undefined
    // it will still get into the map and will get printed in the resulting map
    return arguments;
});

这给了我们这个输出:

[ { '0': 1,
    '1': 0,
    '2': [ 1, 2, 3 ] },
  { '0': 2,
    '1': 1,
    '2': [ 1, 2, 3 ] },
  { '0': 3,
    '1': 2,
    '2': [ 1, 2, 3 ] } ]

但是如果将map方法调用包装到自调用匿名函数中,则所有输出都会丢失:

(function(){
    some_array.map(function() {
        return arguments;
    });
})();

此代码将为我们提供此输出:

undefined

因为匿名函数不会返回任何内容。

答案 5 :(得分:0)

Javascript只有void运算符用于此特殊情况。您可以将它与任何表达式一起使用以丢弃结果。

> void (bigArray = [].concat(...lotsOfSmallArrays))
undefined