如果某个javascript计算的结果是一个10,000个元素的数组,Node.js repl会打印出来。我如何防止它这样做?谢谢
sq1bmfud1#
你可以自己启动REPL并修改任何让你烦恼的东西。例如,你可以告诉它当表达式没有结果时不要打印undefined。或者你可以 Package 表达式的求值并阻止它们返回结果。如果你同时做这两件事,你就有效地将REPL减少到了一个REL:
undefined
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); } }); '
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 到一个自调用匿名函数中,所有输出都会丢失:
map
(function(){ some_array.map(function() { return arguments; }); })();
这段代码将得到这样的输出:
因为匿名函数不返回任何东西。
flseospp3#
只要在repl模块中执行此操作。这将返回作为空字符串的输出。
const repl = require("repl").start({ writer: (output)=>{ return ""; } });
qc6wkl3g4#
为什么不直接在表达式后面加上; null;呢?就像
; null;
new Array(10000); null;
其打印
null
或者更短,使用;0;
;0;
h43kikqp5#
将结果赋值给一个用var声明的变量。var语句总是返回undefined。
var
> new Array(10) [ , , , , , , , , , ] > var a = new Array(10) undefined
ojsjcaue6#
Node使用inspect来格式化返回值。将inspect替换为一个只返回空字符串的函数,它不会显示任何内容。require('util').inspect = function () { return '' };
require('util').inspect = function () { return '' };
ubof19bj7#
JavaScript有void运算符,这是为了处理这种特殊情况。你可以在任何表达式中使用它来丢弃结果。
void
> void (bigArray = [].concat(...lotsOfSmallArrays)) undefined
7条答案
按热度按时间sq1bmfud1#
你可以自己启动REPL并修改任何让你烦恼的东西。例如,你可以告诉它当表达式没有结果时不要打印
undefined
。或者你可以 Package 表达式的求值并阻止它们返回结果。如果你同时做这两件事,你就有效地将REPL减少到了一个REL:dnph8jn42#
我已经在对这个问题的评论中说过,你可能想把命令的执行 Package 在一个匿名函数中。假设你有一些返回某种结果的重复过程。像这样:
这给了我们这个输出:
但是如果将
map
方法调用 Package 到一个自调用匿名函数中,所有输出都会丢失:这段代码将得到这样的输出:
因为匿名函数不返回任何东西。
flseospp3#
只要在repl模块中执行此操作。这将返回作为空字符串的输出。
qc6wkl3g4#
为什么不直接在表达式后面加上
; null;
呢?就像
其打印
或者更短,使用
;0;
h43kikqp5#
将结果赋值给一个用
var
声明的变量。var
语句总是返回undefined
。ojsjcaue6#
Node使用inspect来格式化返回值。将inspect替换为一个只返回空字符串的函数,它不会显示任何内容。
require('util').inspect = function () { return '' };
ubof19bj7#
JavaScript有
void
运算符,这是为了处理这种特殊情况。你可以在任何表达式中使用它来丢弃结果。