2012-12-03 127 views
8

如果某些javascript計算的結果是由10,000個元素組成的數組,則Node.js repl會打印出來。我如何阻止它這樣做?從打印輸出中阻止Node.js repl

感謝

+0

我不認爲有這樣的開關。 – xiaoyi

+0

如何將它包裝在匿名函數中?你在執行什麼聲明? –

+0

由於這是標記'console',請嘗試'$ node yourScript.js>/dev/null 2>&1'來隱藏所有輸出 –

回答

14

你爲什麼不在表達式中附加; null;

new Array(10000); null; 

它打印

null 

或甚至更短,使用;0;

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 

因爲匿名函數不返回任何內容。

+1

追加'0;'比鍵入一個匿名函數要短,如'some_array.map(function(){return arguments; }); 0;' – akuhn

+0

爲了減少輸出,你也可以用'Boolean()'或'typeof() – holmberd

7

結果賦給與var聲明的變量。陳述總是返回undefined

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

> var a = new Array(10) 
undefined 
1

你可以自己開始REPL,並改變任何惱人的事情。例如,如果表達式沒有結果,您可以告訴它不要打印undefined。或者你可以包裝表達式的評估並阻止它們返回結果。如果你同時做這兩件事情你有效的REPL降低到REL:

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

節點使用檢查格式化的返回值。用一個只返回一個空字符串的函數替換inspect,它不會顯示任何東西。

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