gpt4 book ai didi

Node.js 控制台异步应用程序 "best practice"

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:05 25 4
gpt4 key购买 nike

我必须定期编写要直接从 shell 运行的 Node.js 控制台应用程序。他们不接受输入,他们将调用文件系统,执行数据库调用和其他异步类型的事件。有关如何设置托管服务器等的 Node.js 应用程序的示例比比皆是,但对于调用异步进程、等待它,然后在设置退出代码后退出的应用程序。我很难找到我认为优雅的例子。

以下是我目前如何解决此问题的一个片段。任何 Node.js 专家都有更干净的方法来解决这个问题,或者这基本上是“ok”吗?

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);
}
});

最佳答案

这就是 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;
}
})();

关于Node.js 控制台异步应用程序 "best practice",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53157602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com