定期,我必须编写旨在直接从Shell运行的node.js控制台应用程序。他们不接受输入,他们将调用文件系统,进行数据库调用和其他异步类型的活动。关于如何设置托管服务器等的node.js应用程序的示例比比皆是,但是对于调用异步进程的事物,等待它,然后在设置退出代码后退出。我很难找到合适的示例。
这是我现在如何解决的摘要。任何node.js专家都可以使用更简洁的方法来解决这个问题,或者这主要是“可以”吗?
const emitter = new EventEmitter();
emitter.on('exit', (err) => {
if(err) {
console.error(err instanceof Error ? err.message : err);
process.exit(-1);
} else {
process.exit(0);
}
});
setImmediate(async () => {
try {
await doSomeAsyncThing();
emitter.emit('exit', null);
} catch(e) {
emitter.emit('exit', e);
}
});
答案 0 :(得分:1)
这是unhandledRejection
事件的目的。它输出UnhandledPromiseRejectionWarning
,并且默认情况下会在将来的Node版本中引起异常。由于这是这里的意图,因此可以是:
process.on('unhandledRejection', (err) => {
console.error(err instanceof Error ? err.message : err);
process.exit(-1);
});
(async () => {
try {
await doSomeAsyncThing();
process.exit(0);
} catch(e) {
throw e;
}
})();