Dmi*_*ano -2 javascript node.js
我有一个带有异步printInfo方法的Bot类:
class TradeBot {
async printInfo() { //..... }
}
Run Code Online (Sandbox Code Playgroud)
如果我启动“节点”,请从控制台创建对象并调用该方法:
>const createBot = require ('./BotFactory');
>const bot = createBot();
>bot.printInfo();
Run Code Online (Sandbox Code Playgroud)
控制台中会出现一个令人讨厌的额外信息:
Promise {
<pending>,
domain:
Domain {
domain: null,
_events: { error: [Function: debugDomainError] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
Run Code Online (Sandbox Code Playgroud)
有没有办法抑制它?
'await'关键字在这里产生错误。
该“烦人的”额外信息是TradeBot#printInfo返回的Promise对象。
默认情况下,节点REPL打印您调用的任何内容的返回值:
> console.log('Hi')
Hi
undefined
> 2
2
> function hello() {
... return 5;
... }
undefined
> hello()
5
Run Code Online (Sandbox Code Playgroud)
这就是为什么您获得额外输出的原因。
知道了这一点,我们可以看到之前已经提出并回答了这个问题:防止Node.js repl打印输出
简而言之,您可以通过在REPL处写以下行来抑制多余的输出:
bot.printInfo(), undefined;
Run Code Online (Sandbox Code Playgroud)
如果您愿意,可以使用一个额外的参数来启动节点,如该答案所建议的那样定义要使用的REPL。
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);
}
});
'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |