我有一个带有异步printInfo方法的Bot类:
class TradeBot {
async printInfo() { //..... }
}
如果我启动“节点”,请从控制台创建对象并调用方法:
>const createBot = require ('./BotFactory');
>const bot = createBot();
>bot.printInfo();
控制台中会出现一个令人讨厌的额外信息:
Promise {
<pending>,
domain:
Domain {
domain: null,
_events: { error: [Function: debugDomainError] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
有没有办法抑制它?
'await'关键字在此处产生错误。
答案 0 :(得分:4)
“烦人的”额外信息是TradeBot#printInfo
返回的Promise对象。
默认情况下,节点REPL打印您调用的任何内容的返回值:
> console.log('Hi')
Hi
undefined
> 2
2
> function hello() {
... return 5;
... }
undefined
> hello()
5
这就是为什么您获得额外输出的原因。
知道了这一点,我们可以看到之前已经提出并回答了以下问题:Prevent Node.js repl from printing output
简单来说,您可以通过在REPL处写以下行来抑制多余的输出:
bot.printInfo(), undefined;
如果需要,可以使用额外的参数defining the REPL to use作为this answer recommends来启动节点。
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);
}
});
'