javascript 防止Node.js repl打印输出

8e2ybdfx  于 2023-04-04  发布在  Java
关注(0)|答案(7)|浏览(123)

如果某个javascript计算的结果是一个10,000个元素的数组,Node.js repl会打印出来。我如何防止它这样做?
谢谢

sq1bmfud

sq1bmfud1#

你可以自己启动REPL并修改任何让你烦恼的东西。例如,你可以告诉它当表达式没有结果时不要打印undefined。或者你可以 Package 表达式的求值并阻止它们返回结果。如果你同时做这两件事,你就有效地将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);
        }
    });
'
dnph8jn4

dnph8jn42#

我已经在对这个问题的评论中说过,你可能想把命令的执行 Package 在一个匿名函数中。假设你有一些返回某种结果的重复过程。像这样:

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方法调用 Package 到一个自调用匿名函数中,所有输出都会丢失:

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

这段代码将得到这样的输出:

undefined

因为匿名函数不返回任何东西。

flseospp

flseospp3#

只要在repl模块中执行此操作。这将返回作为空字符串的输出。

const repl = require("repl").start({
    writer: (output)=>{
        return "";
    }
});
qc6wkl3g

qc6wkl3g4#

为什么不直接在表达式后面加上; null;呢?
就像

new Array(10000); null;

其打印

null

或者更短,使用;0;

h43kikqp

h43kikqp5#

将结果赋值给一个用var声明的变量。var语句总是返回undefined

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

> var a = new Array(10)
undefined
ojsjcaue

ojsjcaue6#

Node使用inspect来格式化返回值。将inspect替换为一个只返回空字符串的函数,它不会显示任何内容。
require('util').inspect = function () { return '' };

ubof19bj

ubof19bj7#

JavaScript有void运算符,这是为了处理这种特殊情况。你可以在任何表达式中使用它来丢弃结果。

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

相关问题