如何从节点控制台调用异步方法?

时间:2018-12-16 23:41:55

标签: javascript node.js

我有一个带有异步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'关键字在此处产生错误。

1 个答案:

答案 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);
        }
    });
'